Modules HTTP ASP.NET et gestionnaires HTTP

Cet article présente les modules HTTP (Hypertext Transfer Protocol) ASP.NET et les gestionnaires HTTP.

Version du produit d’origine :   ASP.NET
Numéro de la base de connaissances initiale :   307985

Résumé

Les modules HTTP et les gestionnaires HTTP font partie intégrante de l’architecture ASP.NET. Lorsqu’une demande est traitée, chaque demande est traitée par plusieurs modules HTTP (par exemple, le module d’authentification et le module de session) et est ensuite traitée par un seul gestionnaire HTTP. Une fois que le gestionnaire a traité la demande, la demande transite par les modules HTTP.

Vue d’ensemble des modules HTTP

Les modules sont appelés avant et après l’exécution du gestionnaire. Les modules permettent aux développeurs d’intercepter, de participer ou de modifier chaque requête individuelle. Les modules implémentent l' IHttpModule interface, qui se trouve dans l' System.Web espace de noms.

Événements disponibles pouvant être synchronisés avec les modules HTTP

Une HttpApplication classe fournit un certain nombre d’événements pouvant être synchronisés avec les modules. Les événements suivants sont disponibles pour les modules à synchroniser avec chaque requête. Ces événements sont répertoriés dans un ordre séquentiel :

  • BeginRequest: La demande a été démarrée. Si vous devez effectuer une opération au début d’une demande (par exemple, afficher les bannières publicitaires en haut de chaque page), synchronisez cet événement.

  • AuthenticateRequest: Si vous souhaitez brancher votre propre modèle d’authentification personnalisé (par exemple, Rechercher un utilisateur sur une base de données pour valider le mot de passe), générez un module qui synchronise cet événement et authentifiez l’utilisateur sur la manière dont vous le souhaitez.

  • AuthorizeRequest: Cet événement est utilisé en interne pour implémenter les mécanismes d’autorisation (par exemple, pour stocker vos listes de contrôle d’accès dans une base de données et non dans le système de fichiers). Bien que vous puissiez remplacer cet événement, il n’y a pas de bonnes raisons de le faire.

  • ResolveRequestCache: Cet événement détermine si une page peut être fournie à partir du cache de sortie. Si vous souhaitez écrire votre propre module de mise en cache (par exemple, créer un cache de fichiers plutôt qu’un cache de mémoire), synchronisez cet événement pour déterminer s’il doit servir la page à partir du cache.

  • AcquireRequestState: L’état de session est extrait du magasin d’États. Si vous souhaitez créer votre propre module de gestion des États, synchronisez cet événement pour récupérer l’état de session à partir de votre magasin d’État.

  • PreRequestHandlerExecute: Cet événement se produit avant l’exécution du gestionnaire HTTP.

  • PostRequestHandlerExecute: Cet événement se produit après l’exécution du gestionnaire HTTP.

  • ReleaseRequestState: L’état de session est stocké de nouveau dans le magasin d’États. Si vous créez un module d’état de session personnalisé, vous devez stocker votre état dans votre magasin d’États.

  • UpdateRequestCache: Cet événement écrit la sortie dans le cache de sortie. Si vous créez un module de cache personnalisé, vous réécrivez la sortie dans votre cache.

  • EndRequest: La demande a été exécutée. Vous pouvez créer un module de débogage qui recueille des informations sur la requête, puis écrit les informations dans la page.

Les événements suivants sont disponibles pour les modules à synchroniser avec pour chaque transmission de demande. L’ordre de ces événements est non déterministe.

  • PreSendRequestHeaders: Cet événement se produit avant l’envoi des en-têtes. Si vous souhaitez ajouter des en-têtes supplémentaires, vous pouvez synchroniser cet événement à partir d’un module personnalisé.

  • PreSendRequestContent: Cet événement se produit lorsque la Response.Flush méthode est appelée. Si vous souhaitez ajouter du contenu supplémentaire, vous pouvez synchroniser cet événement à partir d’un module personnalisé.

  • Error: Cet événement se produit lorsqu’une exception non gérée se produit. Si vous souhaitez écrire un module de gestionnaire d’erreurs personnalisé, synchronisez cet événement.

Configurer les modules HTTP

Le <httpModules> Gestionnaire de section de configuration est responsable de la configuration des modules http dans une application. Elle peut être déclarée au niveau de l’ordinateur, du site ou de l’application. Utilisez la syntaxe suivante pour le <httpModules> Gestionnaire de section :

<httpModules>
    <add type="[COM+ Class], [Assembly]" name="[ModuleName]" />
    <remove type="[COM+ Class], [Assembly]" name="[ModuleName]" />
    <clear />
</httpModules>

Créer des modules HTTP

Pour créer un module HTTP, vous devez implémenter l' IHttpModule interface. L' IHttpModule interface dispose de deux méthodes avec les signatures suivantes :

void Init(HttpApplication);
void Dispose();

Vue d’ensemble des gestionnaires HTTP

Les gestionnaires sont utilisés pour traiter des demandes individuelles de point de terminaison. Les gestionnaires permettent à l’infrastructure ASP.NET de traiter des URL HTTP individuelles ou des groupes d’extensions d’URL au sein d’une application. Contrairement aux modules, un seul gestionnaire est utilisé pour traiter une demande. Tous les gestionnaires implémentent l' IHttpHandler interface, qui se trouve dans le System.Web namespace . Les gestionnaires sont semblables aux extensions ISAPI (Internet Server Application Programming Interface).

Configurer les gestionnaires HTTP

Le <httpHandlers> Gestionnaire de section de configuration est chargé de mapper les URL entrantes sur la IHttpHandler IHttpHandlerFactory classe ou. Elle peut être déclarée au niveau de l’ordinateur, du site ou de l’application. Les sous-répertoires héritent de ces paramètres.

Les administrateurs utilisent la <add> directive de balise pour configurer la <httpHandlers> section. <Add>les directives sont interprétées et traitées dans un ordre séquentiel de haut en bas. Utilisez la syntaxe suivante pour le <httpHandler> Gestionnaire de section :

<httpHandlers>
    <add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />
    <remove verb="[verb list]" path="[path/wildcard]" />
    <clear />
</httpHandlers>

Créer des gestionnaires HTTP

Pour créer un gestionnaire HTTP, vous devez implémenter l' IHttpHandler interface. L' IHttpHandler interface possède une méthode et une propriété avec les signatures suivantes :

void ProcessRequest(HttpContext);
bool IsReusable {get;}

Notes

Si l’état de session est requis dans votre gestionnaire HTTP, vous devez également implémenter l' IRequiresSessionState interface.