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.

Recursos adicionais