2012-05-22 49 views
1

我一直在ASP.NET MVC中工作了一段時間,但有一件事讓我困惑,它涉及修改HTTP頭的困難。它很簡單到標題(Response.AppendHeader(...);),它是非常(幾乎)簡單到刪除所有標題(Response.ClearHeaders();)。但是當涉及修改和刪除個人標題時,會遇到麻煩。ASP.NET - 難以修改HTTP頭

http標題集合背後的技術原因超過(本質上)是否被寫入響應流的簡單Dictionary<string, string>?爲什麼很容易刪除所有人,但不可能刪除一個人?

注意 - 我不僅關心在服務器上運行它(使用IIS 7,集成管道模式),還在開發中(使用卡西尼)。

回答

0

對於.NET Framwork 3.0,IIS 7.0 /集成模式:

您可能看到的,

Response 

對象具有的類型是NameValueCollection中的

Headers 

屬性(我不確定爲什麼選擇這種類型) http://msdn.microsoft.com/en-us/library/system.web.httpresponse.headers

因此,理論上,您可以使用它來添加或刪除您的頭部/從響應中,正如您在問題中所述。

正如我從Response.AddHeader源代碼可以看到的(我已經使用了Reflector),還有一些額外的檢查。例如,如果在調用「Flush」方法後嘗試添加處理程序(如果您仔細考慮,這是正確的行爲),該方法將拋出異常。 我不確定爲什麼微軟的人已經公開了Headers屬性以及它背後的想法。我認爲它應該至少受到保護,因爲在幕後有額外的邏輯,並且在某些情況下,該過程不限於簡單的數組項插入。

+0

據我所知,它在IIS 7.0 /集成模式下運行時可以工作,但我也擔心在開發中(通過Cassini)運行它。 –