ASP.NET HTTP-Module und HTTP-Handler

In diesem Artikel werden die ASP.NET HTTP-Module (Hypertext Transfer Protocol) und HTTP-Handler vorgestellt.

Ursprüngliche Produktversion:   ASP.NET
Ursprüngliche KB-Nummer:   307985

Zusammenfassung

HTTP-Module und HTTP-Handler sind ein integraler Bestandteil der ASP.NET-Architektur. Während eine Anforderung verarbeitet wird, wird jede Anforderung von mehreren HTTP-Modulen verarbeitet (z. B. dem Authentifizierungsmodul und dem Sitzungsmodul) und dann von einem einzelnen HTTP-Handler verarbeitet. Nachdem der Handler die Anforderung verarbeitet hat, fließt die Anforderung zurück durch die HTTP-Module.

Übersicht über HTTP-Module

Module werden vor und nach der Ausführung des Handlers aufgerufen. Mit Modulen können Entwickler jede einzelne Anforderung abfangen, daran teilnehmen oder diese ändern. Module implementieren die IHttpModule Schnittstelle, die sich im System.Web Namespace befindet.

Verfügbare Ereignisse, mit denen HTTP-Module synchronisiert werden können

Eine HttpApplication Klasse stellt eine Reihe von Ereignissen bereit, mit denen Module synchronisiert werden können. Die folgenden Ereignisse sind für Module verfügbar, mit denen sie bei jeder Anforderung synchronisiert werden können. Diese Ereignisse werden in sequenzieller Reihenfolge aufgelistet:

  • BeginRequest: Die Anforderung wurde gestartet. Wenn Sie am Anfang einer Anforderung etwas tun müssen (z. B. Anzeigen von Ankündigungsbannern oben auf jeder Seite), synchronisieren Sie dieses Ereignis.

  • AuthenticateRequest: Wenn Sie Ihr eigenes benutzerdefiniertes Authentifizierungsschema anschließen möchten (z. B. einen Benutzer anhand einer Datenbank suchen, um das Kennwort zu überprüfen), erstellen Sie ein Modul, das dieses Ereignis synchronisiert und den Benutzer wie gewünscht authentifiziert.

  • AuthorizeRequest: Dieses Ereignis wird intern verwendet, um Autorisierungsmechanismen zu implementieren (z. B. zum Speichern Ihrer Zugriffssteuerungslisten (Access Control Lists, ACLs) in einer Datenbank und nicht im Dateisystem). Obwohl Sie dieses Ereignis überschreiben können, gibt es nicht viele gute Gründe dafür.

  • ResolveRequestCache: Dieses Ereignis bestimmt, ob eine Seite aus dem Ausgabecache bereitgestellt werden kann. Wenn Sie Ein eigenes Zwischenspeicherungsmodul schreiben möchten (z. B. einen dateibasierten Cache anstelle eines Speichercaches erstellen), synchronisieren Sie dieses Ereignis, um zu bestimmen, ob die Seite aus dem Cache bedient werden soll.

  • AcquireRequestState: Der Sitzungsstatus wird aus dem Zustandsspeicher abgerufen. Wenn Sie ein eigenes Zustandsverwaltungsmodul erstellen möchten, synchronisieren Sie dieses Ereignis, um den Sitzungsstatus aus Ihrem Zustandsspeicher abzurufen.

  • PreRequestHandlerExecute: Dieses Ereignis tritt auf, bevor der HTTP-Handler ausgeführt wird.

  • PostRequestHandlerExecute: Dieses Ereignis tritt ein, nachdem der HTTP-Handler ausgeführt wurde.

  • ReleaseRequestState: Der Sitzungsstatus wird wieder im Zustandsspeicher gespeichert. Wenn Sie ein benutzerdefiniertes Sitzungsstatusmodul erstellen, müssen Sie den Zustand wieder im Zustandsspeicher speichern.

  • UpdateRequestCache: Dieses Ereignis schreibt die Ausgabe zurück in den Ausgabecache. Wenn Sie ein benutzerdefiniertes Cachemodul erstellen, schreiben Sie die Ausgabe zurück in den Cache.

  • EndRequest: Die Anforderung wurde abgeschlossen. Möglicherweise möchten Sie ein Debugmodul erstellen, das Informationen in der gesamten Anforderung sammelt und die Informationen dann auf die Seite schreibt.

Die folgenden Ereignisse stehen modulen zur Synchronisierung für jede Anforderungsübertragung zur Verfügung. Die Reihenfolge dieser Ereignisse ist nicht deterministisch.

  • PreSendRequestHeaders: Dieses Ereignis tritt auf, bevor die Header gesendet werden. Wenn Sie zusätzliche Header hinzufügen möchten, können Sie dieses Ereignis aus einem benutzerdefinierten Modul synchronisieren.

  • PreSendRequestContent: Dieses Ereignis tritt auf, wenn die Response.Flush Methode aufgerufen wird. Wenn Sie zusätzliche Inhalte hinzufügen möchten, können Sie dieses Ereignis aus einem benutzerdefinierten Modul synchronisieren.

  • Error: Dieses Ereignis tritt auf, wenn eine unbehandelte Ausnahme auftritt. Wenn Sie ein benutzerdefiniertes Fehlerhandlermodul schreiben möchten, synchronisieren Sie dieses Ereignis.

Konfigurieren von HTTP-Modulen

Der <httpModules> Konfigurationsabschnittshandler ist für die Konfiguration der HTTP-Module innerhalb einer Anwendung verantwortlich. Sie kann auf Computer-, Standort- oder Anwendungsebene deklariert werden. Verwenden Sie die folgende Syntax für den <httpModules> Abschnittshandler:

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

Erstellen von HTTP-Modulen

Um ein HTTP-Modul zu erstellen, müssen Sie die IHttpModule Schnittstelle implementieren. Die IHttpModule Schnittstelle verfügt über zwei Methoden mit den folgenden Signaturen:

void Init(HttpApplication);
void Dispose();

Übersicht über HTTP-Handler

Handler werden verwendet, um einzelne Endpunktanforderungen zu verarbeiten. Handler ermöglichen es dem ASP.NET Framework, einzelne HTTP-URLs oder Gruppen von URL-Erweiterungen innerhalb einer Anwendung zu verarbeiten. Im Gegensatz zu Modulen wird nur ein Handler zum Verarbeiten einer Anforderung verwendet. Alle Handler implementieren die IHttpHandler Schnittstelle, die sich in der System.Web namespace befindet. Handler sind vergleichbar mit ISAPI-Erweiterungen (Internet Server Application Programming Interface).

Konfigurieren von HTTP-Handlern

Der <httpHandlers> Konfigurationsabschnittshandler ist für die Zuordnung eingehender URLs zu der IHttpHandler oder Klasse IHttpHandlerFactory verantwortlich. Sie kann auf Computer-, Standort- oder Anwendungsebene deklariert werden. Unterverzeichnisse erben diese Einstellungen.

Administratoren verwenden die <add> Tag-Direktive, um den Abschnitt zu <httpHandlers> konfigurieren. <Add> Direktiven werden in einer sequenziellen Reihenfolge von oben nach unten interpretiert und verarbeitet. Verwenden Sie die folgende Syntax für den <httpHandler> Abschnittshandler:

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

Erstellen von HTTP-Handlern

Um einen HTTP-Handler zu erstellen, müssen Sie die IHttpHandler Schnittstelle implementieren. Die IHttpHandler Schnittstelle verfügt über eine Methode und eine Eigenschaft mit den folgenden Signaturen:

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

Hinweis

Wenn der Sitzungsstatus in Ihrem HTTP-Handler erforderlich ist, müssen Sie auch die IRequiresSessionState Schnittstelle implementieren.