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做对了。
答案 0 :(得分:2)
这看起来很奇怪。我会安装Firefox的Live HTTP Headers附加组件,以确认Firefox确实看到了你期望的那两个标题。
RFC 2616似乎也建议使用placing quotes round the filename,所以你也可以尝试一下。