【发布时间】:2011-05-07 05:38:42
【问题描述】:
我最近开发了一个列出一系列报告的网络用户控件。当用户点击报告时,它会使用以下代码在响应流中返回一个 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();
代码最初在所有浏览器中都能正常工作。然后客户提出要求为该站点使用 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:"));
}
}
但是,由于使用 SSL 保护站点,CSV 文件下载不再适用于 IE,尽管它们继续适用于 Firefox / Chrome / Safari。
为了使文件响应正常工作,我在 IE 的标头中是否缺少某些东西?
我从 IE 收到的消息是:
“Internet Explorer 无法下载 Reports.aspx 来自 .... in ......
Internet Explorer 无法打开 这个互联网站点。请求的站点 不可用或不能 成立。请稍后再试。”
更新:
这是一些从页面请求返回的 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"
【问题讨论】:
标签: asp.net internet-explorer header download content-type