Firefox 出于某种原因无法正确处理通过我的 .NET HTTP 处理程序发送的内容;它似乎不尊重内容类型标头。相反,它将内容视为 HTML。映射到请求的 URL 甚至具有 .csv 扩展名。Internet Explorer 和 Chrome 正在做正确的事情。“text/css”和“application/pdf”处理程序都出现了问题。
这是我的 HTTP 处理程序的 ProcessRequest 方法的片段:
public void ProcessRequest(HttpContext context)
{
// ...
// Set the output headers
context.Response.ClearHeaders();
context.Response.ContentType = "text/csv";
context.Response.AddHeader(
"Content-Disposition", "attachment; filename=foo.csv");
// Code that writes to the output stream
// ...
context.Response.End();
}
我的回复中缺少什么可以使 Firefox 能够按预期识别内容类型?
编辑1:
当使用 Firefox Live HTTP Headers 扩展时,我看到,我得到了以下标题。看起来我的 ContentType 标头丢失了。
HTTP/1.x 200 OK
Server: ASP.NET Development Server/9.0.0.0
Date: Thu, 31 Dec 2009 02:34:09 GMT
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment;filename="foo.csv"
Cache-Control: private
Content-Type: text/html
Content-Length: 66682
Connection: Close
编辑 2:
发现问题。在我的处理程序中,我使用context.Server.Execute
从 ASPX 模板生成 HTML,然后处理该 HTML。换句话说,我没有使用context. Server.Execute
直接输出到响应。尽管如此,运行该方法会修改当前上下文的响应标头。所以这是撤消我设置的标题。将修改标题的代码移至context.Server.Execute
解决问题后。
这只影响 Firefox 的原因是其他浏览器使用文件扩展名而不是内容类型。Firefox 做了正确的事。