asp.net - 为什么 IE 无法从 Response.Write 服务器我的 CSV 文件?

标签 asp.net internet-explorer header download content-type

我最近开发了一个 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();

该代码最初在所有浏览器中都运行良好。然后客户要求网站使用 SSL。作为其中的一部分,我引入了一个全局处理程序,用于将所有请求的协议(protocol)从 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 特有的 header 中是否缺少某些内容?

我从 IE 收到的消息是:

"Internet Explorer cannot download Reports.aspx from .... in ......

Internet Explorer was unable to open this Internet site. The requested site is either unavailable or cannot be found. Please try again later."

更新:

这是从页面请求返回的一些示例 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"

最佳答案

花了几个小时尝试解决这个问题后,我终于想出了一个解决方案。

幸运的是我找到了a post by Eric Law关于 IE 在 HTTPS 和包含缓存指令的响应 header 之间不兼容的问题。

现在确保所有响应 header 均已清除,并且未对响应执行任何缓存指令,然后文件再次开始响应下载。

关于asp.net - 为什么 IE 无法从 Response.Write 服务器我的 CSV 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4133787/

相关文章:

java - 如何使用 JNI 使用 java 程序运行 c 程序

c# - Azure Web 角色启动时 IIS Express 失败

c# - 如何在 asp.net 中发回 JSON?

c# - 同一解决方案中两个 ASP.NET Core 项目之间的通信

javascript - 使用元标记 "X-UA-Compatible"

c# - 获取具有给定列标题的列的索引 C#

c# - 如何创建由 5 个子图组成的图表

javascript - jQuery.clone() IE问题

在 IE 上隐藏导航下拉菜单的 CSS 问题

c++ - 使用命名空间标准