以前,在WebApi(在.NET 4.x上)中,我们可以通过类型化接口处理请求和响应的标头(请参阅HttpRequestMessage.Headers
/HttpResponseMessage.Headers
)。现在,在第 5 ASP.NET 中,我们HttpRequest
并使用类型 IHeaderDictionary
的标头属性进行HttpResponse
。但它只是一个未键入的字典。
下面我放了一个类型化访问的例子,可以返回一个微调的http-response。需要创建一个HttpResponseMessage
并填充其标头集合(键入 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 + """);
如果为 Microsoft.AspNetCore.Http
添加 using 语句,则HttpRequest
上有扩展方法,HttpResponse
GetTypedHeaders
,这应该会给你你想要的类型安全。
在示例中,我还添加了 using 语句用于 Microsoft.Net.Http.Headers
,只是为了清理它。
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
在 Asp.net 5 中,headers 集合现在是一个单一的类,即 HeaderDictionary
可用于请求和响应标头。这将充当标头的基于键值的存储。我能看到的很好的原因是因为欧文的支持。一个存储可以在各种Owin支持的中间件中使用,例如WebApi,SignalR,它为您提供了在标头集合中添加更多信息的可扩展性。