Firefox在使用IHttpHandler时无法正确处理内容类型

时间:2009-12-30 22:39:26

标签: .net http firefox content-type ihttphandler

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做对了。

1 个答案:

答案 0 :(得分:2)

这看起来很奇怪。我会安装Firefox的Live HTTP Headers附加组件,以确认Firefox确实看到了你期望的那两个标题。

RFC 2616似乎也建议使用placing quotes round the filename,所以你也可以尝试一下。