Solicitar recursos no ASP.NET Core
Por Steve Smith
A API HttpContext
usada por aplicativos e middleware para processar solicitações tem uma camada de abstração abaixo dela chamada interfaces de recurso. Cada interface de recurso fornece um subconjunto granular da funcionalidade exposta por HttpContext
. Essas interfaces podem ser adicionadas, modificadas, encapsuladas, substituídas ou até mesmo removidas pelo servidor ou middleware à medida que a solicitação é processada sem precisar implementar novamente todo HttpContext
. Eles também podem ser usados para simular a funcionalidade ao testar.
Coleções de recursos
A propriedade Features de HttpContext
fornece acesso à coleção de interfaces de recurso para a solicitação atual. Como a coleção de recursos é mutável, mesmo no contexto de uma solicitação, o middleware pode ser usado para modificar a coleção e adicionar suporte para recursos adicionais. Alguns recursos avançados só estão disponíveis pelo acesso à interface associada por meio da coleção de recursos.
Interfaces de recurso
O ASP.NET Core define várias interfaces de recurso HTTP comuns em Microsoft.AspNetCore.Http.Features, que são compartilhadas por diversos servidores e middleware para identificar os recursos para os quais dão suporte. Servidores e middleware também podem fornecer suas próprias interfaces com funcionalidade adicional.
A maioria das interfaces de recursos fornece funcionalidades opcionais e leves e suas APIs associadas HttpContext
fornecem padrões se o recurso não estiver presente. Algumas interfaces são indicadas no conteúdo a seguir, conforme necessário, porque fornecem a funcionalidade principal de solicitação e resposta e devem ser implementadas para processar a solicitação.
As seguintes interfaces de recurso são de Microsoft.AspNetCore.Http.Features:
IHttpRequestFeature: define a estrutura de uma solicitação HTTP, incluindo o protocolo, o caminho, a cadeia de caracteres de consulta, os cabeçalhos e o corpo. Esse recurso é necessário para processar solicitações.
IHttpResponseFeature: define a estrutura de uma resposta HTTP, incluindo o código de status, os cabeçalhos e o corpo da resposta. Esse recurso é necessário para processar solicitações.
IHttpResponseBodyFeature: define diferentes maneiras de gravar o corpo da resposta, usando um Stream
, um PipeWriter
ou um arquivo. Esse recurso é necessário para processar solicitações. Substitui o IHttpResponseFeature.Body
e o IHttpSendFileFeature
.
IHttpAuthenticationFeature: mantém o ClaimsPrincipal atualmente associado à solicitação.
IFormFeature: usado para analisar e armazenar em cache envios de formulário HTTP e de várias partes de entrada.
IHttpBodyControlFeature: usado para controlar se operações de E/S síncronas são permitidas para os corpos de solicitação ou resposta.
IHttpActivityFeature
: usado para adicionar informações Activity
para ouvintes de diagnóstico.
IHttpBufferingFeature: define métodos para desabilitar o buffer de solicitações e/ou respostas.
IHttpConnectionFeature: define propriedades para a ID de conexão e endereços e portas locais e remotas.
IHttpMaxRequestBodySizeFeature: controla o tamanho máximo permitido do corpo da solicitação para a solicitação atual.
IHttpRequestBodyDetectionFeature
: indica se a solicitação pode ter um corpo.
IHttpRequestIdentifierFeature: adiciona uma propriedade que pode ser implementada para identificar as solicitações de forma exclusiva.
IHttpRequestLifetimeFeature: define o suporte para anular conexões ou detectar se uma solicitação foi encerrada prematuramente, como por uma desconexão do cliente.
IHttpRequestTrailersFeature: fornece acesso aos cabeçalhos do trailer da solicitação, se houver.
IHttpResetFeature: usado para enviar mensagens de redefinição para protocolos que dão suporte a eles, como HTTP/2 ou HTTP/3.
IHttpResponseTrailersFeature: permite que o aplicativo forneça cabeçalhos de trailer de resposta, se houver suporte.
IHttpSendFileFeature: define um método para enviar arquivos de forma assíncrona.
IHttpUpgradeFeature Define o suporte para Upgrades de HTTP, que permitem ao cliente especificar quais protocolos adicionais ele desejará usar se o servidor quiser mudar os protocolos.
IHttpWebSocketFeature: define uma API para aceitar WebSockets.
IHttpsCompressionFeature: controla se a compactação de resposta deve ser usada em conexões HTTPS.
IItemsFeature: armazena a coleção Items para o estado do aplicativo por solicitação.
IQueryFeature: analisa e armazena em cache a cadeia de caracteres de consulta.
IRequestBodyPipeFeature: representa o corpo da solicitação como um PipeReader.
IRequestCookiesFeature: analisa e armazena em cache os valores de cabeçalho da solicitação Cookie
.
IResponseCookiesFeature: controla como os cookies de resposta são aplicados ao cabeçalho Set-Cookie
.
IServerVariablesFeature: esse recurso fornece acesso a variáveis de servidor de solicitação, como as fornecidas pelo IIS.
IServiceProvidersFeature: fornece acesso a um IServiceProvider com serviços de solicitação com escopo.
ISessionFeature: define abstrações ISessionFactory
e ISession para dar suporte a sessões de usuário. ISessionFeature
é implementado pelo SessionMiddleware (confira Sessão no ASP.NET Core).
ITlsConnectionFeature: define uma API para recuperar os certificados de cliente.
ITlsTokenBindingFeature: define métodos para trabalhar com parâmetros de associação de token de TLS.
ITrackingConsentFeature: usado para consultar, conceder e retirar o consentimento do usuário em relação ao armazenamento de informações do usuário sobre atividade e funcionalidade do site.