2

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 做了正确的事。

4

1 回答 1

2

这似乎很奇怪。我会为 Firefox 安装Live HTTP Headers插件,只是为了确认 Firefox 确实如您所愿地看到了这两个标头。

RFC 2616 似乎也建议在 filename 周围加上引号,因此您也可以尝试一下。

于 2009-12-31T02:09:00.027 回答