2012-07-25 45 views
1

我已經問了與此相關的this question over on programmers。我試圖找到一個合適的頭文件,這個頭文件不太可能被剝離,即使它沒有發送正文,我也可以用它發回每個響應的唯一請求ID。在Asp.Net Web API的DelegatingHandler中編寫Pragma頭文件

我考慮的頭文件之一是Pragma頭文件,因爲看起來該規範似乎不僅用於額外的no-cache HTTP 1.0向後兼容性值,而且還用於特定於應用程序的值,所以我應該能夠使用它。例如,應該可以發送諸如no-cache; requestid=id之類的東西。

所以在DelegatingHandler我試圖用我的ID寫它:

//HttpResponseMessage Response; 
Response.Headers.Add("pragma", "some_value"); 

但到達與no-cache客戶端;總是。我認爲WebAPI會自動發送緩存標題,與正在關閉的緩存保持一致,其中包括Pragma之一。

那麼,如何確保我的價值得到維護並且不會被覆蓋?

+0

使用您自定義的'x-mycompany-myheader'標題有什麼問題? – Aliostad 2012-07-25 22:41:05

+0

只是它被代理服務器剝離的可能性。客戶端可能是手機或服務器在公司代理服務器後面(例如,我們特別具有侵略性),所以我真的想要一個不會迷路的人。 – 2012-07-25 22:47:40

回答

0

我已經破解了,答案是要確保你也設置在HttpResponseMessage,然後繞過在System.Web.Http.WebHost.HttpControllerHandler一些略有腥邏輯CacheControl頭(I've opened a discussion on CodePlex about this;我認爲邏輯需要改變)。

所以不是

//HttpResponseMessage Response; 
Response.Headers.Add("pragma", "some_value"); 

你要做的:

Response.Headers.CacheControl = 
    new System.Net.Http.Headers.CacheControlHeaderValue() 
    { 
    NoCache = true 
    }; 
Response.Headers.Add("pragma", "some_value"); 

(我使用NoCache的,因爲目前的API默認是切換緩存關閉所有響應)。

相關問題