ASP.NET modules HTTP et gestionnaires HTTP

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

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

Résumé

Les modules HTTP et les gestionnaires HTTP font partie intégrante de l’architecture ASP.NET. Pendant le traitement d’une requête, chaque requête est traitée par plusieurs modules HTTP (par exemple, le module d’authentification et le module de session), puis est traitée par un seul gestionnaire HTTP. Une fois que le gestionnaire a traité la requête, la requête revient par le biais des 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’interface IHttpModule , qui se trouve dans l’espace de System.Web noms .

Événements disponibles avec ux auxquels les modules HTTP peuvent se synchroniser

Une HttpApplication classe fournit un certain nombre d’événements avec lesquels les modules peuvent se synchroniser. Les événements suivants sont disponibles pour la synchronisation des modules avec chaque requête. Ces événements sont répertoriés dans l’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 des bannières publicitaires en haut de chaque page), synchronisez cet événement.

  • AuthenticateRequest: si vous souhaitez connecter votre propre schéma d’authentification personnalisé (par exemple, rechercher un utilisateur sur une base de données pour valider le mot de passe), créez un module qui synchronise cet événement et authentifie l’utilisateur comme vous le souhaitez.

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

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

  • AcquireRequestState: l’état de session est récupéré à partir du magasin d’état. Si vous souhaitez créer votre propre module de gestion d’état, 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 la session est de nouveau stocké dans le magasin d’état. Si vous créez un module d’état de session personnalisé, vous devez stocker votre état dans votre magasin d’état.

  • UpdateRequestCache: cet événement réé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é effectuée. Vous pouvez créer un module de débogage qui collecte des informations tout au long de la demande, puis écrit les informations dans la page.

Les événements suivants sont disponibles pour les modules à synchroniser avec pour chaque transmission de requête. L’ordre de ces événements n’est pas 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 des modules HTTP

Le <httpModules> gestionnaire de section de configuration est responsable de la configuration des modules HTTP au sein d’une application. Il peut être déclaré au niveau de l’ordinateur, du site ou de l’application. Utilisez la syntaxe suivante pour le gestionnaire de <httpModules> sections :

<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’interface IHttpModule . L’interface IHttpModule a 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 de point de terminaison individuelles. 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’interface IHttpHandler , qui se trouve dans le System.Web namespace. Les gestionnaires sont analogues aux extensions ISAPI (Internet Server Application Programming Interface).

Configurer des gestionnaires HTTP

Le <httpHandlers> gestionnaire de section de configuration est chargé de mapper les URL entrantes à la IHttpHandler classe ou IHttpHandlerFactory . Il peut être déclaré 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 gestionnaire de <httpHandler> sections :

<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’interface IHttpHandler . L’interface IHttpHandler a une méthode et une propriété avec les signatures suivantes :

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

Remarque

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