【问题标题】:Why does IIS7 ignore my content-type header when I use ASP.NET to stream files?当我使用 ASP.NET 流式传输文件时,为什么 IIS7 会忽略我的内容类型标头?
【发布时间】:2011-01-14 21:20:39
【问题描述】:

我有一个有两个页面的简单网站。一个显示文件列表,另一个在列表中单击文件时流式传输文件。生产 6 个月一切正常,但现在我必须将站点移至 Windows 2008/IIS7。我大部分时间都在工作,但是文件无法正确打开(在 Firefox 中),因为我的内容类型标头被忽略了。在生产站点(IIS6)上,标头是(使用 Fiddler):

HTTP/1.1 200 OK
Date: Tue, 09 Feb 2010 16:00:51 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"
Content-Length: 236841
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
Content-Type: application/octet-stream

但在测试 IIS7 服务器上我得到:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 236841
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"

Fiddler 还报告了协议违规并显示“内容长度不匹配:响应标头要求 236841 字节,但服务器发送了 238378 字节。”

我的代码如下所示:

            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=\"" + doc.DisplayFilename + "." + doc.FileExtension + "\"");
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.TransmitFile(file.FullName);
            Response.End();

这几天我一直在尝试解决这个问题。我对 IIS7 不太熟悉,并且一直在努力寻找更改各种设置的位置。我确实设法弄清楚了这两种托管管道模式,并通过切换到经典 .NET AppPool 解决了一些其他问题(集成在传输文件时抛出了各种错误)。

有没有办法告诉 IIS7 不要覆盖我的 ContentType 标头,如果这是正在发生的事情?

【问题讨论】:

    标签: asp.net iis-7 download content-type response.transmitfile


    【解决方案1】:

    您没有修改请求/响应的 HttpModules? web.config 文件是否完全相同?

    这些额外的 2K 字节从何而来?里面有什么?

    【讨论】:

    • 事实证明它与 IIS7 无关——它与我添加的一些错误处理代码有关。 Response.End() 似乎是一个错误,尽管许多网络示例都包含该行。它会导致“线程被中止”异常。这导致我的错误处理程序运行,它执行 Server.Transfer 到错误页面。所以响应在底部有其他标题、文件和错误页面 HTML 的开头。当开始编写错误页面时,它会将内容类型翻转回 HTML。短篇小说:删除 Response.End() 语句解决了问题。
    • 非常有趣!之前没有从 Response.End 看到这种行为......我会记住它。
    • 显然我也遇到了同样的问题,删除 Response.End() 解决了它。看起来它正在撤消我的自定义 Content-Type 标头(图像/tiff)并将其重置为 text/html 导致浏览器混乱。
    猜你喜欢
    • 2012-09-22
    • 2021-03-12
    • 1970-01-01
    • 2012-12-11
    • 2014-06-15
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多