asp.net core - mvc - Donde todos los tipos de encabezados http ido en ASP.NET 5?
asp.net core vs asp.net mvc (2)
En Asp.net 5, la colección de encabezados ahora es de una sola clase, es decir, HeaderDictionary
que se puede usar para los encabezados tanto de solicitud como de respuesta. Esto actuará como un almacén basado en el valor clave para los encabezados. La buena razón por la que puedo ver es por el apoyo de Owin. Una tienda se puede utilizar en varios middleware compatibles con Owin, por ejemplo, WebApi, SignalR, que le proporciona ampliabilidad para agregar más información en la colección de encabezado.
Anteriormente, en WebApi (en .NET 4.x) podíamos trabajar con encabezados tanto de la solicitud como de la respuesta a través de interfaces tipadas (consulte HttpRequestMessage.Headers
/ HttpResponseMessage.Headers
). Ahora, en ASP.NET 5 tenemos propiedades HttpRequest
y HttpResponse
con Encabezados de tipo IHeaderDictionary
. Pero es solo un diccionario sin tipo.
A continuación pongo un ejemplo con acceso tipeado que podría devolver una respuesta http ajustada. Se necesita para crear un HttpResponseMessage
y completar su colección de encabezados (que se tipeó por cierto).
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 + "/"");
Si agrega la instrucción using para Microsoft.AspNetCore.Http
, existen métodos de extensión en HttpRequest
y HttpResponse
para GetTypedHeaders
, que le proporcionarán el tipo de seguridad que desee.
En el ejemplo, también agregué la instrucción using para Microsoft.Net.Http.Headers
, solo para limpiarla.
var headers = Response.GetTypedHeaders();
headers.ContentType = new MediaTypeHeaderValue("text/cache-manifest");
headers.CacheControl = new CacheControlHeaderValue { NoCache = true, Public = true };
headers.ETag = new EntityTagHeaderValue("/"" + etag + "/"");