Где все типы заголовков 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, который обеспечивает расширяемость для добавления дополнительной информации в коллекцию заголовков.