0

所以它适用于 HttpResponse 类:

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

(我们必须为 IE 编码文件名)但现在应该为 HttpListener 完成。它适用于 IE。问题是 FireFox 和 Chrome 不会像 IE 那样解码编码的标头值,但是 HttpResponse.AddHeader 不允许非拉丁字符(来自 System.Net 的代码):

if ((ch == '\x007f') || ((ch < ' ') && (ch != '\t')))
    throw new ArgumentException(SR.GetString("net_WebHeaderInvalidControlChars"), "value");

我尝试使用反射在支票周围走动:

Type type = response.Headers.GetType();
PropertyInfo info = type.GetProperty("InnerCollection",
    BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic);
NameValueCollection headers = (NameValueCollection)info.GetValue(response.Headers, null);
headers.Add(name, value);

什么都没有出现,但文件名已完全损坏。我应该怎么做才能让它工作?

4

1 回答 1

1

没有可移植和跨浏览器的方法来做到这一点。

请参阅http://greenbytes.de/tech/tc2231/上的表格,了解有效和无效的服务器/浏览器/标头组合。

最好的办法是只发送Content-Disposition: attachment并让浏览器从/path/file.extURI 部分获取“默认”文件名。

于 2012-07-02T07:53:15.820 回答