Fonctionnalités de requête dans ASP.NET Core

Par Steve Smith

L’API HttpContext que les applications et les intergiciels utilisent pour traiter les demandes a une couche d’abstraction en dessous, appelée interfaces de fonctionnalité. Chaque interface de fonctionnalité fournit un sous-ensemble granulaire des fonctionnalités exposées par HttpContext. Ces interfaces peuvent être ajoutées, modifiées, encapsulées, remplacées ou même supprimées par le serveur ou l’intergiciel, car la requête est traitée sans avoir à ré-implémenter l’intégralité de HttpContext. Elles peuvent également être utilisées pour simuler des fonctionnalités lors de tests.

Collections de fonctionnalités

La propriété Features de HttpContext fournit l’accès à la collection d’interfaces de fonctionnalités pour la requête actuelle. Étant donné que la collection de fonctionnalités est mutable même dans le contexte d’une requête, il est possible d’utiliser un intergiciel (middleware) pour modifier la collection et ajouter la prise en charge de fonctionnalités supplémentaires. Certaines fonctionnalités avancées sont uniquement disponibles en accédant à l’interface associée via la collection de fonctionnalités.

Interfaces de fonctionnalités

ASP.NET Core définit un certain nombre d’interfaces de fonctionnalités HTTP courantes dans Microsoft.AspNetCore.Http.Features. Ces interfaces sont partagées par différents serveurs et intergiciels pour identifier les fonctionnalités prises en charge. Les serveurs et les intergiciels peuvent également fournir leurs propres interfaces avec des fonctionnalités supplémentaires.

La plupart des interfaces de fonctionnalités fournissent des fonctionnalités facultatives et lumineuses, et leurs API HttpContext associées fournissent des valeurs par défaut si la fonctionnalité n’est pas présente. Quelques interfaces sont indiquées dans le contenu suivant en fonction des besoins, car elles fournissent les principales fonctionnalités de requête et de réponse et doivent être implémentées pour traiter la demande.

Les interfaces de fonctionnalités suivantes proviennent de Microsoft.AspNetCore.Http.Features :

IHttpRequestFeature : définit la structure d’une requête HTTP, notamment le protocole, le chemin d’accès, la chaîne de requête, les en-têtes et le corps. Cette fonctionnalité est requise pour traiter les demandes.

IHttpResponseFeature : définit la structure d’une réponse HTTP, notamment le code d’état, les en-têtes et le corps de la réponse. Cette fonctionnalité est requise pour traiter les demandes.

IHttpResponseBodyFeature : définit différentes façons d’écrire le corps de la réponse à l’aide d’un Stream, d’un PipeWriter ou d’un fichier. Cette fonctionnalité est requise pour traiter les demandes. Ceci remplace IHttpResponseFeature.Body et IHttpSendFileFeature.

IHttpAuthenticationFeature : contient le ClaimsPrincipal actuellement associé à la requête.

IFormFeature : permet d’analyser et de mettre en cache les soumissions de formulaires HTTP entrants et multipartes.

IHttpBodyControlFeature: permet de contrôler si les opérations d’E/S synchrones sont autorisées pour les corps de requête ou de réponse.

IHttpActivityFeature : permet d’ajouter des informations Activity pour les écouteurs de diagnostic.

IHttpBufferingFeature : définit les méthodes permettant de désactiver la mise en mémoire tampon des requêtes et/ou des réponses.

IHttpConnectionFeature : définit les propriétés de l’ID de connexion et des adresses et ports locaux et distants.

IHttpMaxRequestBodySizeFeature : contrôle la taille maximale autorisée du corps de la requête pour la requête actuelle.

IHttpRequestBodyDetectionFeature : indique si la requête peut avoir un corps.

IHttpRequestIdentifierFeature : ajoute une propriété qui peut être implémentée pour identifier de façon unique des requêtes.

IHttpRequestLifetimeFeature : définit la prise en charge de l’abandon de connexions, ou de la détection de l’arrêt prématuré d’une requête, par exemple en raison de la déconnexion d’un client.

IHttpRequestTrailersFeature : fournit l’accès aux en-têtes du code de fin de la requête, le cas échéant.

IHttpResetFeature : permet d’envoyer des messages de réinitialisation pour les protocoles qui les prennent en charge, tels que HTTP/2 ou HTTP/3.

IHttpResponseTrailersFeature : permet à l’application de fournir des en-têtes de code de fin de réponse, si elles sont prises en charge.

IHttpSendFileFeature : définit une méthode d’envoi de fichiers de façon asynchrone.

IHttpUpgradeFeature : définit la prise en charge des mises à niveau HTTP, qui permettent au client de spécifier des protocoles supplémentaires qu’il veut utiliser si le serveur souhaite changer de protocole.

IHttpWebSocketFeature : définit une API pour la prise en charge de sockets web.

IHttpsCompressionFeature : contrôle si la compression de réponse doit être utilisée sur les connexions HTTPS.

IItemsFeature : stocke la collection Items pour l’état de l’application par requête.

IQueryFeature : analyse et met en cache la chaîne de requête.

IRequestBodyPipeFeature : représente le corps de la requête sous la forme d’un PipeReader.

IRequestCookiesFeature : analyse et met en cache les valeurs d’en-tête Cookie de requête .

IResponseCookiesFeature : contrôle la façon dont les réponses cookie sont appliquées à l’en-tête Set-Cookie.

IServerVariablesFeature : cette fonctionnalité permet d’accéder aux variables de serveur de requête telles que celles fournies par IIS.

IServiceProvidersFeature : fournit l’accès à un IServiceProvider avec des services de requête délimités.

ISessionFeature : définit les abstractions ISessionFactory et ISession pour prendre en charge les sessions utilisateur. ISessionFeature est implémenté par le SessionMiddleware (consultez Session dans ASP.NET Core).

ITlsConnectionFeature : définit une API pour la récupération de certificats clients.

ITlsTokenBindingFeature : définit des méthodes permettant d’utiliser des paramètres de liaison de jeton TLS.

ITrackingConsentFeature : permet d’interroger, d’accorder et de retirer le consentement de l’utilisateur concernant le stockage des informations utilisateur liées à l’activité et aux fonctionnalités du site.

Ressources supplémentaires