Modules HTTP ASP.NET et gestionnaires HTTP
Cet article présente les modules http et les gestionnaires HTTP (Hypertext Transfer Protocol) ASP.NET.
Version du produit d’origine : ASP.NET
Numéro de 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 qu’une requête est traitée, chaque requête est traitée par plusieurs modules HTTP (par exemple, le module d’authentification et le module de session), puis traitée par un seul gestionnaire HTTP. Une fois que le gestionnaire a traité la requête, la requête revient via 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’interface IHttpModule
, qui se trouve dans l’espace System.Web
de noms.
Événements disponibles que les modules HTTP peuvent synchroniser avec
Une HttpApplication
classe fournit un certain nombre d’événements avec lesquels les modules peuvent être synchronisés. Les événements suivants sont disponibles pour que les modules soient synchronisés 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 quelque chose 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 brancher 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éez un cache basé sur un fichier plutôt qu’un cache mémoire), synchronisez cet événement pour déterminer s’il faut servir la page à partir du cache.AcquireRequestState
: l’état de session est récupéré à partir du magasin d’états. Si vous souhaitez générer 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 session est stocké 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’é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 que les modules soient synchronisés avec chaque transmission de requête. 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 laResponse.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 chargé de configurer les modules HTTP au sein d’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 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 les 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 ou IHttpHandlerFactory
à la IHttpHandler
classe. 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 supérieur. Utilisez la syntaxe suivante pour le <httpHandler>
gestionnaire de 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;}
Note
Si l’état de session est requis dans votre gestionnaire HTTP, vous devez également implémenter l’interface IRequiresSessionState
.