HttpListenerResponse.AddHeader不喜欢非拉丁符号



所以它适用于 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部分获取"默认"文件名。

相关内容

  • 没有找到相关文章