所以它适用于 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);
没有任何内容,但文件名已完全损坏。我应该怎么做才能让它工作?
没有可移植和跨浏览器的方法可以做到这一点。
请参阅 http://greenbytes.de/tech/tc2231/中的表格,了解有效和无效的服务器/浏览器/标头的组合。
最好的办法是只发送Content-Disposition: attachment
,让浏览器从/path/file.ext
URI部分获取"默认"文件名。