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 ヘッダー拡張機能を使用すると、次のヘッダーが返されることがわかりました。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 用のライブ HTTP ヘッダーアドオンをインストールして、Firefox が実際にこれら 2 つのヘッダーを期待どおりに表示していることを確認します。

RFC 2616 では、 filename を引用符で囲むことも推奨されているようですので、それも試してみてください。

于 2009-12-31T02:09:00.027 に答える