2015-04-17 27 views
10

以前,在WebApi(.NET 4.x)中,我們可以通過輸入接口(請參閱HttpRequestMessage.Headers/HttpResponseMessage.Headers)處理請求和響應的標頭。 現在,在ASP.NET 5中,我們有HttpRequestHttpResponse以及類型爲IHeaderDictionary的Headers屬性。但它只是一個無類型的字典。HTTP頭中的所有類型都在ASP.NET 5中去了嗎?

下面我用類型化訪問的例子可以返回一個微調的http響應。需要創建一個HttpResponseMessage並填充其Headers集合(這是鍵入btw)。

HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK); 
response.Content = new StringContent(manifestContent); 
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/cache-manifest"); 
response.Headers.CacheControl = new CacheControlHeaderValue {NoCache = true, Public = true}; 
response.Headers.ETag = new EntityTagHeaderValue("\"" + etag + "\""); 

回答

13

如果添加Microsoft.AspNetCore.Http的使用語句,則在HttpRequestHttpResponseGetTypedHeaders之間有擴展方法,這應該爲您提供所需的類型安全性。

在這個例子中,我還添加了Microsoft.Net.Http.Headers的using語句,只是爲了清理它。

var headers = Response.GetTypedHeaders(); 
headers.ContentType = new MediaTypeHeaderValue("text/cache-manifest"); 
headers.CacheControl = new CacheControlHeaderValue { NoCache = true, Public = true }; 
headers.ETag = new EntityTagHeaderValue("\"" + etag + "\""); 

來源:aspnet/HttpAbstractions on Github

+0

什麼HttpContextBase? – JoshYates1980

0

在Asp.net 5標題集合現在是一個單一的類即HeaderDictionary可用於請求和響應標頭。這將作爲標題的基於關鍵值的商店。我能看到的很好的理由是因爲Owin的支持。一個商店可以用於各種Owin支持的中間件,例如WebApi,SignalR,它爲您在Header集合中添加更多信息提供了可擴展性。

相關問題