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

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

Ниже я привожу пример с типизированным доступом, который может возвращать настроенный http-ответ. Это необходимо для создания HttpResponseMessage и заполнения его коллекции заголовков (которая, кстати, была набрана).

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 + "\"");

person Shrike    schedule 17.04.2015    source источник


Ответы (2)


Если вы добавите оператор 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

person Matt DeKrey    schedule 18.04.2015
comment
А как насчет HttpContextBase? - person JoshYates1980; 29.01.2017

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

person vendettamit    schedule 17.04.2015