ASP.NET HTTP-Module und HTTP-Handler

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

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

Zusammenfassung

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

Übersicht über HTTP-Module

Module werden vor und nach der Ausführung des Handlers aufgerufen. Mithilfe von Modulen können Entwickler jede einzelne Anforderung abfangen, daran teilnehmen oder ä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 Werbebannern oben auf jeder Seite), synchronisieren Sie dieses Ereignis.

  • AuthenticateRequest: Wenn Sie Ihr eigenes benutzerdefiniertes Authentifizierungsschema einbinden möchten (z. B. einen Benutzer für eine 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 Cachemodul 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 bereitgestellt werden soll.

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

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

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

  • ReleaseRequestState: Der Sitzungszustand wird wieder im Zustandsspeicher gespeichert. Wenn Sie ein benutzerdefiniertes Sitzungszustandsmodul erstellen, müssen Sie Ihren Zustand wieder in Ihrem 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 Ihren Cache.

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

Die folgenden Ereignisse sind für Module verfügbar, mit denen sie bei jeder Anforderungsübertragung synchronisiert werden können. 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 über ein benutzerdefiniertes Modul synchronisieren.

  • Error: Dieses Ereignis tritt auf, wenn eine nicht behandelte 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 zuständig. 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 zum Verarbeiten einer Anforderung nur ein Handler verwendet. Alle Handler implementieren die IHttpHandler -Schnittstelle, die sich im System.Web namespacebefindet. Handler sind analog zu ISAPI-Erweiterungen (Internet Server Application Programming Interface).

Konfigurieren von HTTP-Handlern

Der <httpHandlers> Konfigurationsabschnittshandler ist für das Zuordnen eingehender URLs zur - oder IHttpHandlerFactory -IHttpHandlerKlasse verantwortlich. Sie kann auf Computer-, Standort- oder Anwendungsebene deklariert werden. Unterverzeichnisse erben diese Einstellungen.

Administratoren verwenden die <add> Tagdirektive, um den <httpHandlers> Abschnitt zu konfigurieren. <Add> -Anweisungen 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

Zum Erstellen eines HTTP-Handlers 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 Sitzungszustand in Ihrem HTTP-Handler erforderlich ist, müssen Sie auch die IRequiresSessionState -Schnittstelle implementieren.