簡體   English   中英

當我使用ASP.NET傳輸文件時,為什么IIS7會忽略我的內容類型標頭?

[英]Why does IIS7 ignore my content-type header when I use ASP.NET to stream files?

我有一個有兩頁的簡單網站。 一個顯示文件列表,另一個文件在列表中單擊時流式傳輸。 生產6個月都很好,但現在我必須將網站移動到Windows 2008 / IIS7。 我有它主要工作,但文件無法正常打開(在Firefox中)因為我的內容類型標題被忽略。 在生產站點(IIS6)上,標題是(使用Fiddler):

HTTP/1.1 200 OK
Date: Tue, 09 Feb 2010 16:00:51 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"
Content-Length: 236841
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
Content-Type: application/octet-stream

但在測試IIS7服務器上我得到:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 236841
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"

Fiddler還報告違反協議並說“內容長度不匹配:響應標頭聲稱236841字節,但服務器發送了238378字節。”

我的代碼看起來像這樣:

            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=\"" + doc.DisplayFilename + "." + doc.FileExtension + "\"");
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.TransmitFile(file.FullName);
            Response.End();

我一直試圖解決這個問題幾天。 我對IIS7並不熟悉,並且很難找到改變各種設置的位置。 我確實設法弄清了兩種管理流水線模式,並通過切換到Classic .NET AppPool修復了一些其他問題(Integrated在傳輸文件時拋出了各種錯誤)。

有沒有辦法告訴IIS7不要覆蓋我的ContentType標頭,如果這是發生了什么?

您沒有HttpModules修改請求/響應? web.config文件是否完全相同?

這些額外的2K字節來自哪里? 它們里面有什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM