http 标头的所有类型在第 5 ASP.NET 消失了



以前,在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,它为您提供了在标头集合中添加更多信息的可扩展性。

最新更新