哪个http头的类型在ASP.NET 5中消失了?

时间:2015-04-17 18:22:52

标签: c# asp.net-core asp.net-core-mvc

以前,在WebApi(在.NET 4.x上),我们可以通过类型化接口处理请求和响应的标头(请参阅HttpRequestMessage.Headers / HttpResponseMessage.Headers)。 现在,在ASP.NET 5中,我们有HttpRequestHttpResponse,其Headers属性类型为IHeaderDictionary。但它只是一个无类字典。

下面我给一个带有类型访问的例子可以返回一个微调的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 + "\"");

2 个答案:

答案 0 :(得分:16)

如果您为Microsoft.AspNetCore.Http添加using语句,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

答案 1 :(得分:0)

在Asp.net 5中,headers集合现在是单个类,即HeaderDictionary,可用于请求和响应头。这将作为标题的基于键值的商店。我能看到的好理由是因为Owin的支持。可以在各种Owin支持的中间件之间使用一个商店,例如WebApi,SignalR,它为您提供了在Header集合中添加更多信息的可扩展性。