HttpListenerResponse.AddHeader不喜欢非拉丁符号

时间:2012-06-29 18:07:21

标签: c# firefox header httplistener non-latin

所以它适用于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);

没有任何事情发生,但文件名完全被破坏了。 我该怎么做才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

没有便携式和跨浏览器的方式来执行此操作。

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

最好的办法是发送Content-Disposition: attachment并让浏览器从/path/file.ext URI部分中选择“默认”文件名。