Share via


Procédure pas à pas : création et inscription d'un module HTTP personnalisé

Mise à jour : novembre 2007

Cette procédure pas à pas illustre la fonctionnalité de base d'un module HTTP personnalisé. Un module HTTP est appelé à chaque demande en réponse aux événements BeginRequest et EndRequest. Le module s'exécute donc avant et après le traitement d'une demande.

Si l'application ASP.NET s'exécute sous IIS 6.0, vous pouvez utiliser des modules HTTP pour personnaliser les demandes de ressources traitées par ASP.NET. Cela inclut les pages Web ASP.NET (fichiers .aspx), les services Web (fichiers .asmx), les gestionnaires ASP.NET (fichiers .ashx) et tous les types de fichier que vous avez mappés à ASP.NET. Si l'application ASP.NET s'exécute sous IIS 7.0, vous pouvez utiliser des modules HTTP pou personnaliser les demandes de ressources traitées par IIS. Cela n'inclut pas seulement les ressources ASP.NET, mais également les fichiers HTML (fichiers .htm ou .html), les fichiers graphiques, etc. Pour plus d'informations, consultez Vue d'ensemble du cycle de vie des applications ASP.NET pour IIS 5.0 et 6.0 et Vue d'ensemble du cycle de vie des applications ASP.NET pour IIS 7.0.

Le module d'exemple figurant dans cette rubrique ajoute un message à la page Web ASP.NET demandée au début de toute requête HTTP. Il ajoute un autre message après que la page a été traitée. Ce module inclut du code qui vérifie qu'il n'ajoute pas de texte à une demande pour tout autre type de fichier.

Chaque gestionnaire d'événements est écrit en tant que méthode privée du module. Lorsque les événements inscrits sont déclenchés, ASP.NET appelle le gestionnaire appropriée dans le module, qui écrit les informations sur la page Web ASP.NET.

Cette procédure pas à pas décrit les tâches suivantes :

  • Comment créer le code pour un module HTTP

  • Comment inscrire le module dans le fichier Web.config

Composants requis

Pour exécuter cette procédure pas à pas, vous avez besoin de :

  • Visual Studio ou Visual Web Developer.

La procédure pas à pas suppose également que vous utilisez IIS 6.0 ou IIS 7.0. Toutefois, vous pouvez voir les fonctionnalités du module même si vous exécutez le serveur de développement ASP.NET.

Création d'une classe de module HTTP personnalisée

Pour commencer, vous créerez un fichier de classe qui implémente le module.

Pour créer une classe de module HTTP personnalisée

  1. Créez un Site Web ASP.NET et nommez-le Handler.

    Remarque :

    Vous pouvez attribuer n'importe quel nom au site Web.

  2. Si le site Web ne comporte pas déjà de dossier App_Code, créez-en un sous la racine du site.

  3. Dans le répertoireApp_Code, créez un fichier nommé HelloWorldModule.vb (pour Visual Basic) ou HelloWorldModule.cs (pour C#).

    Remarque :

    Vous pouvez également, si vous utilisez Visual Studio (et pas Visual Web Developer Express), créer HelloWorldModule en tant que projet de bibliothèque de classes, le compiler et placer l'assembly résultant dans le répertoire bin de l'application Web.

  4. Ajoutez le code suivant au fichier de classe :

    Imports Microsoft.VisualBasic
    Imports System.Web
    
    Public Class HelloWorldModule
        Implements IHttpModule
    
        Public Sub New()
        End Sub
    
        Public ReadOnly Property ModuleName() As String
            Get
                Return "HelloWorldModule"
            End Get
        End Property
    
        ' In the Init function, register for HttpApplication 
        ' events by adding your handlers. 
        Public Sub Init(ByVal application As HttpApplication) _
                Implements IHttpModule.Init
            AddHandler application.BeginRequest, _
                AddressOf Me.Application_BeginRequest
            AddHandler application.EndRequest, _
                AddressOf Me.Application_EndRequest
        End Sub
    
        Private Sub Application_BeginRequest(ByVal source As Object, _
                 ByVal e As EventArgs)
            ' Create HttpApplication and HttpContext objects to access 
            ' request and response properties. 
            Dim application As HttpApplication = DirectCast(source, _
                HttpApplication)
            Dim context As HttpContext = application.Context
            Dim filePath As String = context.Request.FilePath
            Dim fileExtension As String = _
                VirtualPathUtility.GetExtension(filePath)
            If fileExtension.Equals(".aspx") Then
                context.Response.Write("<h1><font color=red>" & _
                    "HelloWorldModule: Beginning of Request" & _
                    "</font></h1><hr>")
            End If
        End Sub
    
        Private Sub Application_EndRequest(ByVal source As Object, _
            ByVal e As EventArgs)
            Dim application As HttpApplication = DirectCast(source, _
                HttpApplication)
            Dim context As HttpContext = application.Context
            Dim filePath As String = context.Request.FilePath
            Dim fileExtension As String = _
                VirtualPathUtility.GetExtension(filePath)
            If fileExtension.Equals(".aspx") Then
                context.Response.Write("<hr><h1><font color=red>" & _
                    "HelloWorldModule: End of Request</font></h1>")
            End If
        End Sub
    
        Public Sub Dispose() Implements System.Web.IHttpModule.Dispose
        End Sub
    
    End Class
    
    using System;
    using System.Web;
    public class HelloWorldModule : IHttpModule
    {
        public HelloWorldModule()
        {
        }
    
        public String ModuleName
        {
            get { return "HelloWorldModule"; }
        }
    
        // In the Init function, register for HttpApplication 
        // events by adding your handlers.
        public void Init(HttpApplication application)
        {
            application.BeginRequest += 
                (new EventHandler(this.Application_BeginRequest));
            application.EndRequest += 
                (new EventHandler(this.Application_EndRequest));
        }
    
        private void Application_BeginRequest(Object source, 
             EventArgs e)
        {
        // Create HttpApplication and HttpContext objects to access
        // request and response properties.
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            string filePath = context.Request.FilePath;
            string fileExtension = 
                VirtualPathUtility.GetExtension(filePath);
            if (fileExtension.Equals(".aspx"))
            {
                context.Response.Write("<h1><font color=red>" +
                    "HelloWorldModule: Beginning of Request" +
                    "</font></h1><hr>");
            }
        }
    
        private void Application_EndRequest(Object source, EventArgs e)
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            string filePath = context.Request.FilePath;
            string fileExtension = 
                VirtualPathUtility.GetExtension(filePath);
            if (fileExtension.Equals(".aspx"))
            {
                context.Response.Write("<hr><h1><font color=red>" +
                    "HelloWorldModule: End of Request</font></h1>");
            }
        }
    
        public void Dispose() { }
    }
    
  5. Enregistrez et fermez le fichier de classe.

  6. Dans le menu Générer, cliquez sur Générer le site Web.

    Si le site Web n'est pas généré, corrigez les problèmes éventuels. Le module HTTP personnalisé doit être compilé, sinon, vous ne pourrez pas inscrire le module.

Enregistrement du module HTTP en mode classique IIS 6.0 et IIS 7.0

Après avoir créé la classe HelloWorldModule, vous devez inscrire le module en créant une entrée dans le fichier Web.config. L'inscription du module HTTP permet de l'abonner à des notifications de pipeline de demande.

Dans IIS 7.0, une application peut s'exécuter en mode classique ou intégré. En mode classique, le traitement des demandes est fondamentalement identique à celui effectué dans IIS 6.0. En mode intégré, IIS 7.0 gère les demandes à l'aide d'un pipeline qui lui permet de partager demandes, modules et autres fonctionnalités avec ASP.NET.

La procédure d'inscription d'un module est différente dans IIS 7.0 en mode classique et IIS 7.0 en mode intégré. Cette section décrit la procédure pour IIS 6.0 et IIS 7.0 mode classique. La procédure d'inscription d'un module qui s'exécute dans IIS 7.0 mode intégré est décrite dans la section suivante.

Pour inscrire le module pour IIS 6.0 et IIS 7.0 s'exécutant en mode classique

  1. Si le site Web ne possède pas de fichier Web.config, créez-en un à la racine du site.

  2. Ajoutez le code en surbrillance suivant à votre fichier Web.config :

    <configuration>
      <system.web>
        <httpModules>      <add name="HelloWorldModule" type="HelloWorldModule"/>     </httpModules>
      </system.web>
    </configuration>
    

    Le code inscrit le module avec le nom de classe et le nom de module de HelloWorldModule/

Inscription du module HTTP dans IIS 7.0 mode intégré

La procédure d'inscription d'un module dans IIS 7.0 mode intégré diffère légèrement de la procédure à utiliser pour IIS 7.0 mode classique.

Pour inscrire le module pour IIS 7.0 s'exécutant en mode intégré

  1. Si le site Web ne possède pas de fichier Web.config, créez-en un à la racine du site.

  2. Ajoutez le code en surbrillance suivant à votre fichier Web.config :

    <configuration>
      <system.webServer>    <modules>      <add name="HelloWorldModule" type="HelloWorldModule"/>    </modules>  </system.webServer>
    </configuration>
    
    Remarque :

    Vous pouvez également inscrire le module en utilisant le Gestionnaire des services IIS. Pour plus d'informations, consultez Configuring Modules in IIS 7.0.

    Le code inscrit le module avec le nom de classe et le nom de module de HelloWorldModule/

Test du module HTTP personnalisé

Après avoir créé et inscrit votre module HTTP personnalisé, vous pouvez le tester.

Pour tester le module HTTP personnalisé

  1. Ajoutez une nouvelle page ASP.NET dans l'application.

  2. Cliquez avec le bouton droit sur la page que vous venez d'ajouter, puis sélectionner Afficher dans le navigateur.

    Le module HTTP ajoute une chaîne au début et à la fin de la réponse. Le module s'exécute automatiquement sur toute demande de fichier dont l'extension est assignée à ASP.NET. Pour plus d'informations, consultez Vue d'ensemble des gestionnaires HTTP et des modules HTTP.

Voir aussi

Concepts

Vue d'ensemble du cycle de vie des applications ASP.NET pour IIS 5.0 et 6.0