Freigeben über


Exemplarische Vorgehensweise: Erstellen und Registrieren eines benutzerdefinierten HTTP-Moduls

Aktualisiert: November 2007

In dieser exemplarischen Vorgehensweise werden die grundlegenden Funktionen eines benutzerdefinierten HTTP-Moduls dargestellt. Ein HTTP-Modul wird bei jeder Anforderung als Reaktion auf das BeginRequest-Ereignis und das EndRequest-Ereignis aufgerufen. Folglich wird das Modul vor und nach der Verarbeitung einer Anforderung ausgeführt.

Wenn die ASP.NET-Anwendung unter IIS 6.0 ausgeführt wird, können mit HTTP-Modulen Anforderungen für Ressourcen, die von ASP.NET erfüllt werden, angepasst werden. Dazu gehören ASP.NET-Webseiten (ASPX-Dateien), Webdienste (ASMX-Dateien), ASP.NET-Handler (ASHX-Dateien) und alle Dateitypen, die ASP.NET zugeordnet wurden. Wenn die ASP.NET-Anwendung unter IIS 7.0 ausgeführt wird, können mit HTTP-Modulen Anforderungen für alle Ressourcen, die von IIS erfüllt werden, angepasst werden. Dazu gehören nicht nur ASP.NET-Ressourcen, sondern auch HTML-Dateien (HTM- oder HTML-Dateien), Grafikdateien und andere. Weitere Informationen finden Sie unter Übersicht über den Lebenszyklus von ASP.NET-Anwendungen für IIS 5.0 und 6.0 und Übersicht über den Lebenszyklus von ASP.NET-Anwendungen für IIS 7.0.

Das Beispielmodul in diesem Thema fügt der angeforderten ASP.NET-Webseite eine Meldung am Anfang jeder HTTP-Anforderung hinzu. Es fügt eine weitere Meldung hinzu, nachdem die Seite verarbeitet wurde. Das Modul enthält Code, mit dem sichergestellt wird, dass einer Anforderung eines anderen Dateityps kein Text hinzugefügt wird.

Alle Ereignishandler werden als private Methoden des Moduls geschrieben. Wenn die registrierten Ereignisse ausgelöst werden, ruft ASP.NET den entsprechenden Handler im Modul auf, der Informationen in die ASP.NET-Webseite schreibt.

In dieser exemplarischen Vorgehensweise werden u. a. die folgenden Aufgaben veranschaulicht:

  • Erstellen von Code für ein HTTP-Modul.

  • Registrieren des Moduls in der Datei Web.config.

Voraussetzungen

Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

  • Visual Studio oder Visual Web Developer.

In der exemplarischen Vorgehensweise wird ebenfalls davon ausgegangen, dass Sie mit IIS 6.0 oder IIS 7.0 arbeiten. Die Funktionalität des Moduls wird jedoch auch deutlich, wenn Sie den ASP.NET Development Server verwenden.

Erstellen einer benutzerdefinierten HTTP-Modulklasse

Zunächst erstellen Sie eine Klassendatei, die das Modul implementiert.

So erstellen Sie eine benutzerdefinierte HTTP-Modulklasse

  1. Erstellen Sie eine ASP.NET-Website, und nennen Sie diese Handler.

    Hinweis:

    Sie können einen beliebigen Namen für die Website wählen.

  2. Wenn für die Website noch kein Ordner App_Code vorhanden ist, erstellen Sie einen solchen im Stammverzeichnis der Site.

  3. Erstellen Sie im Verzeichnis App_Code die Klassendatei HelloWorldModule.vb (für Visual Basic) oder HelloWorldModule.cs (für C#).

    Hinweis:

    Wenn Sie Visual Studio (nicht Visual Web Developer Express Edition) verwenden, können Sie auch HelloWorldModule als Klassenbibliothekprojekt erstellen, kompilieren und die fertige Assembly im Bin-Verzeichnis der Anwendung ablegen.

  4. Fügen Sie der Klassendatei den folgenden Code hinzu:

    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. Speichern und schließen Sie die Klassendatei.

  6. Klicken Sie im Menü Erstellen auf Website erstellen.

    Wenn die Website nicht erstellt werden kann, korrigieren Sie alle Probleme. Das benutzerdefinierte HTTP-Modul muss kompiliert werden, damit es registriert werden kann.

Registrieren des HTTP-Moduls im klassischen Modus von IIS 6.0 und IIS 7.0

Nach dem Erstellen der HelloWorldModule-Klasse können Sie das Modul registrieren, indem Sie einen Eintrag in der Datei Web.config erstellen. Durch die Registrierung können Anforderungspipeline-Benachrichtigungen vom HTTP-Modul abonniert werden.

In IIS 7.0 kann eine Anwendung im klassischen oder im integrierten Modus ausgeführt werden. Im klassischen Modus werden Anforderungen im Wesentlichen wie in IIS 6.0 verarbeitet. Im integrierten Modus werden Anforderungen von IIS 7.0 mithilfe einer Pipeline verwaltet, sodass Anforderungen, Module und andere Features für ASP.NET freigegeben werden können.

Das Verfahren zum Registrieren eines Moduls unterscheidet sich im klassischen Modus von IIS 7.0 und im integrierten Modus von IIS 7.0. In diesem Abschnitt wird die Vorgehensweise für IIS 6.0 und den klassischen Modus von IIS 7.0 beschrieben. Die Vorgehensweise zur Registrierung eines Moduls, das im integrierten Modus von IIS 7.0 ausgeführt wird, wird im nächsten Abschnitt beschrieben.

So registrieren Sie das Modul für IIS 6.0 und den klassischen Modus von IIS 7.0

  1. Wenn für die Website noch keine Web.config-Datei vorhanden ist, erstellen Sie diese im Stammverzeichnis der Website.

  2. Fügen Sie der Datei Web.config folgenden markierten Code hinzu:

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

    Der Code registriert das Modul mit dem Klassennamen und dem Modulnamen HelloWorldModule.

Registrieren des HTTP-Moduls im integrierten Modus von IIS 7.0

Das Vorgehen zum Registrieren eines Moduls im integrierten Modus von IIS 7.0 unterscheidet sich etwas vom Vorgehen im klassischen Modus von IIS 7.0.

So registrieren Sie das Modul für IIS 7.0 im integrierten Modus

  1. Wenn für die Website noch keine Web.config-Datei vorhanden ist, erstellen Sie diese im Stammverzeichnis der Website.

  2. Fügen Sie der Datei Web.config folgenden markierten Code hinzu:

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

    Sie können das Modul auch mit dem IIS-Manager registrieren. Weitere Informationen finden Sie unter Configuring Modules in IIS 7.0.

    Der Code registriert das Modul mit dem Klassennamen und dem Modulnamen HelloWorldModule.

Testen des benutzerdefinierten HTTP-Moduls

Nach dem Erstellen und Registrieren des benutzerdefinierten HTTP-Moduls kann es getestet werden.

So testen Sie das benutzerdefinierte HTTP-Modul

  1. Fügen Sie der Anwendung eine neue ASP.NET-Seite hinzu.

  2. Klicken Sie mit der rechten Maustaste auf die Seite, die Sie gerade hinzugefügt haben, und wählen Sie In Browser anzeigen aus.

    Das HTTP-Modul fügt am Anfang und am Ende der Antwort eine Zeichenfolge ein. Das Modul wird automatisch bei jeder Anforderung für eine Datei ausgeführt, deren Dateierweiterung ASP.NET zugeordnet ist. Weitere Informationen finden Sie unter Übersicht über HTTP-Handler und HTTP-Module.

Siehe auch

Konzepte

Übersicht über den Lebenszyklus von ASP.NET-Anwendungen für IIS 5.0 und 6.0