Características de solicitud de ASP.NET Core
Por Steve Smith
La API HttpContext
que las aplicaciones y el middleware usan para procesar solicitudes tiene una capa de abstracción debajo de ella llamada interfaces de características. Cada interfaz de características proporciona un subconjunto granular de la funcionalidad expuesta por HttpContext
. El servidor o el middleware pueden agregar, modificar, ajustar, reemplazar o incluso quitar estas interfaces a medida que se procesa la solicitud sin tener que volver a implementar HttpContext
íntegramente. También se pueden usar para simular la funcionalidad durante las pruebas.
Colecciones de características
La propiedad Features de HttpContext
proporciona acceso a la colección de interfaces de características para la solicitud actual. Puesto que la colección de características es mutable incluso en el contexto de una solicitud, se puede usar middleware para modificarla y para agregar compatibilidad con más características. Algunas características avanzadas solo están disponibles al acceder a la interfaz asociada a través de la colección de características.
Interfaces de características
ASP.NET Core define una serie de interfaces de características HTTP comunes en Microsoft.AspNetCore.Http.Features, que diferentes servidores y el middleware comparten para identificar las características que admiten. Los servidores y el middleware también pueden proporcionar sus propias interfaces con funcionalidad adicional.
La mayoría de las interfaces de características proporcionan una funcionalidad opcional y ligera, y sus API HttpContext
asociadas proporcionan valores predeterminados si la característica no existe. Algunas interfaces se indican en el siguiente contenido según sea necesario, ya que proporcionan la funcionalidad de solicitud y respuesta básica y deben implementarse para procesar la solicitud.
Las siguientes interfaces de características son de Microsoft.AspNetCore.Http.Features:
IHttpRequestFeature: define la estructura de una solicitud HTTP; es decir, el protocolo, la ruta de acceso, la cadena de consulta, los encabezados y el cuerpo. Esta característica es necesaria para procesar las solicitudes.
IHttpResponseFeature: define la estructura de una respuesta HTTP; es decir, el código de estado, los encabezados y el cuerpo de la respuesta. Esta característica es necesaria para procesar las solicitudes.
IHttpResponseBodyFeature: define diferentes formas de escribir el cuerpo de la respuesta, mediante una clase Stream
o PipeWriter
, o un archivo. Esta característica es necesaria para procesar las solicitudes. Reemplaza IHttpResponseFeature.Body
y IHttpSendFileFeature
.
IHttpAuthenticationFeature: contiene la clase ClaimsPrincipal asociada actualmente con la solicitud.
IFormFeature: se usa para analizar y almacenar en caché los envíos de formularios HTTP y de varias partes entrantes.
IHttpBodyControlFeature: se utiliza para controlar si se permiten las operaciones de E/S sincrónicas para los cuerpos de solicitud o respuesta.
IHttpActivityFeature
: se usa para agregar información de Activity
para los clientes de escucha de diagnóstico.
IHttpBufferingFeature: define métodos para deshabilitar el almacenamiento en búfer de solicitudes o respuestas.
IHttpConnectionFeature: define las propiedades del identificador de conexión y las direcciones y los puertos tanto locales como remotos.
IHttpMaxRequestBodySizeFeature: controla el tamaño máximo permitido del cuerpo de la solicitud para la solicitud actual.
IHttpRequestBodyDetectionFeature
: indica si la solicitud puede tener un cuerpo.
IHttpRequestIdentifierFeature: agrega una propiedad que se puede implementar para distinguir solicitudes de forma única.
IHttpRequestLifetimeFeature: define la capacidad para anular conexiones o para detectar si una solicitud ha finalizado antes de tiempo (por ejemplo, debido a una desconexión del cliente).
IHttpRequestTrailersFeature: proporciona acceso a los encabezados del finalizador de la solicitud, si existen.
IHttpResetFeature: se usa para enviar mensajes de restablecimiento para los protocolos que los admiten, como HTTP/2 o HTTP/3.
IHttpResponseTrailersFeature: permite que la aplicación proporcione encabezados del finalizador de respuesta si se admiten.
IHttpSendFileFeature: define un método para enviar archivos de forma asincrónica.
IHttpUpgradeFeature: define la compatibilidad con actualizaciones HTTP, que permiten al cliente especificar otros protocolos que le gustaría usar en caso de que el servidor cambie de protocolo.
IHttpWebSocketFeature: define una API para admitir WebSockets.
IHttpsCompressionFeature: controla si se debe usar la compresión de respuesta a través de conexiones HTTPS.
IItemsFeature: almacena la colección de Items para cada estado de la aplicación de solicitud.
IQueryFeature: analiza y almacena en caché la cadena de consulta.
IRequestBodyPipeFeature: representa el cuerpo de la solicitud como una clase PipeReader.
IRequestCookiesFeature: analiza y almacena en caché los valores del encabezado Cookie
de solicitud.
IResponseCookiesFeature: controla cómo las cookies de respuesta se aplican al encabezado Set-Cookie
.
IServerVariablesFeature: esta característica proporciona acceso a las variables del servidor de solicitudes, como las proporcionadas por IIS.
IServiceProvidersFeature: proporciona acceso a una clase IServiceProvider mediante servicios de solicitud con ámbito.
ISessionFeature: define abstracciones ISessionFactory
y ISession para admitir sesiones de usuario. ISessionFeature
se implementa mediante SessionMiddleware (consulte Sesión en ASP.NET Core).
ITlsConnectionFeature: define una API para recuperar certificados de cliente.
ITlsTokenBindingFeature: define métodos para trabajar con parámetros de enlace de tokens de TLS.
ITrackingConsentFeature: se usa para consultar, conceder y retirar el consentimiento del usuario en relación con el almacenamiento de la información de usuario relacionada con la actividad y la funcionalidad del sitio.