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 は正しいことを行います。