我最近开发了一个列出一系列报告的Web用户控件。当用户点击报告它使用下面的代码提供早在响应流中的CSV文件下载:为什么IE无法从Response.Write服务我的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 ....在......
的Internet Explorer无法打开 这个互联网网站。请求的网站 要么不可用,要么找不到 ,请稍后再试。“
UPDATE:
下面是一些例子提琴手输出的页面请求,它看起来像它的服务正确回来。为什么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"
在请求启动之前,页面被定义为HTTPS,提琴手确认。 – 2010-11-09 13:03:36
嗯。点击报告时网址是什么样的?它是提供csv文件的页面的相对路径吗? – 2010-11-09 13:11:47
这是回送响应的相同页面。每个报告都有一个链接,当用户单击链接时,上面的第一个示例代码块将使用csvResults变量中正确的csv数据执行。 – 2010-11-09 13:29:38