Где все типы заголовков http ушли в ASP.NET 5?

Ранее в WebApi (на .NET 4.x) мы могли работать с заголовками как запроса, так и ответа через типизированные интерфейсы (см. HttpRequestMessage.Headers/HttpResponseMessage.Headers). Теперь в ASP.NET 5 мы имеем HttpRequest и HttpResponse с свойством Headers типа IHeaderDictionary. Но это просто нетипизированный словарь.

Ниже я приведу пример с типизированным доступом, который может вернуть тонко настроенный http-ответ. Ему нужно было создать 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 + "\"");

Ответ 1

Если вы добавите оператор using для Microsoft.AspNetCore.Http, существуют методы расширения на 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 на Github

Ответ 2

В Asp.net 5 коллекция заголовков теперь представляет собой один класс, т.е. HeaderDictionary, который может использоваться как для заголовков запросов, так и для ответа. Это будет действовать как хранилище с ключевыми значениями для заголовков. Хорошая причина, по которой я вижу, - это поддержка Овина. Один магазин можно использовать, используя различное промежуточное ПО, поддерживаемое Owin, например. WebApi, SignalR, который обеспечивает расширяемость для добавления дополнительной информации в коллекцию заголовков.