2009-12-30 45 views
2

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做正確的事情。

回答

2

這看起來很奇怪。我會爲Firefox安裝Live HTTP Headers加載項,以確認Firefox確實能夠按照您的預期看到這兩個標頭。

RFC 2616似乎也建議placing quotes round the filename,所以你也可以嘗試一下。

+0

優秀的建議。我安裝了Live HTTP Headers,並發現確實沒有找回正確的內容類型標題。我將很快添加我在響應中獲得的標題。 – Jacob 2009-12-31 02:35:50

+0

很酷。對不起,我不能進一步幫助,因爲我不知道ASP.NET開發服務器以及爲什麼或者什麼地方可能會被覆蓋。也許當部署在IIS或其他服務器而不是開發服務器上的東西會正常工作? – 2009-12-31 02:59:17

+0

不幸的是,IIS中也發生了同樣的情況。 – Jacob 2009-12-31 03:09:55