Firefox由於某種原因沒有正確處理通過我的.NET HTTP處理程序發送的內容;它似乎不遵守內容類型標題。相反,它將內容視爲HTML。映射到請求的URL甚至具有.csv擴展名。 Internet Explorer和Chrome正在做正確的事情。問題發生在「text/css」和「application/pdf」處理程序中。Firefox在使用IHttpHandler時沒有正確處理內容類型
這裏是我的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();
}
什麼是從我的反應缺失,這將使火狐認識到內容類型如預期?
編輯1:
當使用Firefox的活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做正確的事情。
優秀的建議。我安裝了Live HTTP Headers,並發現確實沒有找回正確的內容類型標題。我將很快添加我在響應中獲得的標題。 – Jacob 2009-12-31 02:35:50
很酷。對不起,我不能進一步幫助,因爲我不知道ASP.NET開發服務器以及爲什麼或者什麼地方可能會被覆蓋。也許當部署在IIS或其他服務器而不是開發服務器上的東西會正常工作? – 2009-12-31 02:59:17
不幸的是,IIS中也發生了同樣的情況。 – Jacob 2009-12-31 03:09:55