Bri*_*ott 2 asp.net internet-explorer content-type header download
我最近开发了一个Web用户控件,列出了一系列报告.当用户点击报告时,它使用以下代码在响应流中回送CSV文件下载:
Response.Clear();
Response.ContentType = "text/CSV";
Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "no-cache");
Response.Expires = -1;
Response.AddHeader("Pragma", "must-revalidate");
Response.AddHeader("Cache-Control", "must-revalidate");
Response.AddHeader("Accept-Header", csvResults.Length.ToString());
Response.AddHeader("Content-Length", csvResults.Length.ToString());
Response.AddHeader("content-disposition", "attachment; filename=test.csv");
Response.Write(csvResults.ToString());
Response.Flush();
Response.End();
Run Code Online (Sandbox Code Playgroud)
该代码最初在所有浏览器中都运行良好.然后客户端要求为站点使用SSL.作为其中的一部分,我介绍了一个全局处理程序,用于将所有请求的协议从HTTP更新为HTTPS,如下所示:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string requestURL = Request.Url.ToString().ToLower();
if (requestURL.StartsWith("http://"))
{
Response.Redirect(requestURL.Replace("http:", "https:"));
}
}
Run Code Online (Sandbox Code Playgroud)
但是,由于使用SSL保护站点,因此CSV文件下载不再适用于IE,尽管它们可以继续用于Firefox/Chrome/Safari.
为了使文件响应正常工作,我在IE中独有的标题中是否缺少某些内容?
我从IE收到的消息是:
"Internet Explorer无法从.....中下载Reports.aspx ......
Internet Explorer无法打开此Internet站点.请求的网站不可用或无法找到.请稍后再试."
更新:
这是一个从页面请求返回的示例fiddler输出,看起来它正常服务.为什么IE不明白它只是被提供了一个文件?
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:23:50 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Pragma: no-cache
Pragma: must-revalidate
content-disposition: attachment; filename="test.csv"
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Length: <length value would be here>
Content-Type: text/CSV
"COL1","COL2","COL3"
"VAL1","VAL2","VAL3"
"VAL1","VAL2","VAL3"
"VAL1","VAL2","VAL3"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5379 次 |
| 最近记录: |