[英]IIS Content-Disposition file name encoded twice
下载文件时,Content-Disposition 被编码两次。 这会导致非 ascii 字符的文件名不可读。
这种双重编码仅在请求由 IIS 重写模块 2.0 处理并路由到服务器场时发生。 在这种情况下,当代码提供文件作为下载时,响应 header,Content-Disposition,是双重编码的。 浏览器将其解码一次,留下一个编码文件名,其中非 ascii 字符不可读。
在没有 IIS 重写模块和 ARR 的情况下处理相同请求的情况。 响应 header, Content-Disposition 被编码,但只有一次。 在这种情况下,浏览器会解码文件名并且非 ascii 字符是可读的。
这几天我一直在研究这个。 我只发现了 1 个这样的问题,但没有遮阳篷。
作为参考,这里是用于下载文件的代码。 (ASP.NET 应用程序)在这段代码中,report 代表一个实体框架 object,文件名是一个未编码的字符串。 我们不对文件名进行编码。 所以我什至不确定是什么负责第一次编码。
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "application/octet-stream";
response.AddHeader("Content-Disposition",
"attachment; filename=" + report.FileName);
response.TransmitFile(filePath);
response.Flush();
response.End();
以下是显示问题的 2 张图片:
示例下载请求 header 与 IIS 重写和 ARR:
示例下载请求 header 没有 IIS 重写和 ARR
关于解决方案的任何想法? (不使用 rewrite/arr/server farm 不是一个选项)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.