Parece que posso usar HttpContext.Features
e HttpContext.Items
para armazenar alguns dados para compartilhar com classes diferentes com acesso a HttpContext
.
Existem algumas situações em que devo preferir um em vez do outro? Ou depende puramente de mim? É errado usar um deles em certas circunstâncias?
Olá, @ayepirate.
A propriedade Features de HttpContext fornece uma interface para obter e configurar os recursos HTTP disponíveis 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.
Portanto, apenas recursos podem ser registrados na coleção Features
. Fonte: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/request-features?view=aspnetcore-2.0
Para passar dados arbitrários entre diferentes aspectos de seu código dentro do escopo da solicitação, você deve usar a coleção Items
: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/request- recursos? view = aspnetcore-2.0
@mkArtakMSFT mas posso criar meus próprios recursos e configurá-los. E compartilhe dados dessa forma, então qual é a diferença.
Embora os servidores sejam responsáveis por criar a coleção de recursos, o middleware pode adicionar a essa coleção e consumir recursos da coleção. Por exemplo, o StaticFileMiddleware acessa o recurso IHttpSendFileFeature. Se o recurso existir, ele será usado para enviar o arquivo estático solicitado de seu caminho físico. Caso contrário, um método alternativo mais lento é usado para enviar o arquivo. Quando disponível, o IHttpSendFileFeature permite que o sistema operacional abra o arquivo e execute uma cópia direta do modo kernel para a placa de rede.
Os recursos são mais como um contrato explícito entre a implementação e o consumidor. Eles podem ter mais significado e também expor o comportamento, não apenas o estado. Os itens são realmente implementados por meio de um recurso. Os itens são um dicionário genérico feito para o estado de ida e volta entre as coisas que têm acesso ao contexto http.
Comentários muito úteis
Os recursos são mais como um contrato explícito entre a implementação e o consumidor. Eles podem ter mais significado e também expor o comportamento, não apenas o estado. Os itens são realmente implementados por meio de um recurso. Os itens são um dicionário genérico feito para o estado de ida e volta entre as coisas que têm acesso ao contexto http.