HTTP-Module und HTTP-Handler von ASP.NET
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 integraler Bestandteil der ASP.NET-Architektur. Während eine Anforderung verarbeitet wird, wird jede Anforderung zuerst von mehreren HTTP-Modulen (z. B. dem Authentifizierungsmodul und dem Sitzungsmodul) verarbeitet und dann von einem einzelnen HTTP-Handler. Nachdem der Handler die Anforderung verarbeitet hat, fließt die Anforderung durch die HTTP-Module zurück.
Übersicht über HTTP-Module
Module werden vor und nach 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 anschließen möchten (z. B. einen Benutzer anhand einer Datenbank nachschlagen, 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 (ACLs) in einer Datenbank und nicht im Dateisystem). Obwohl Sie dieses Ereignis außer Kraft setzen 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 Sitzungsstatus wird aus dem Zustandsspeicher abgerufen. Wenn Sie Ihr eigenes Statusverwaltungsmodul erstellen möchten, synchronisieren Sie dieses Ereignis, um den Sitzungszustand aus Ihrem Zustandsspeicher zu erfassen.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 Sitzungsstatus wird wieder im Zustandsspeicher gespeichert. Wenn Sie ein benutzerdefiniertes Sitzungszustandsmodul erstellen, müssen Sie den 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 wieder in den Cache.EndRequest
: Die Anforderung wurde abgeschlossen. Möglicherweise möchten Sie ein Debugmodul erstellen, das Informationen während der gesamten Anforderung sammelt und dann die Informationen auf die Seite schreibt.
Die folgenden Ereignisse sind für Module verfügbar, mit denen für jede Anforderungsübertragung synchronisiert werden kann. Die Reihenfolge dieser Ereignisse ist nicht deterministisch.
PreSendRequestHeaders
: Dieses Ereignis tritt auf, bevor die Kopfzeilen gesendet werden. Wenn Sie zusätzliche Kopfzeilen hinzufügen möchten, können Sie dieses Ereignis aus einem benutzerdefinierten Modul synchronisieren.PreSendRequestContent
: Dieses Ereignis tritt auf, wenn dieResponse.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
Zum Erstellen eines HTTP-Moduls 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 das 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
. Handler sind analog zu Internet Server Application Programming Interface (ISAPI)-Erweiterungen.
Konfigurieren von HTTP-Handlern
Der <httpHandlers>
Konfigurationsabschnittshandler ist für die Zuordnung eingehender URLs zu der IHttpHandler
oder IHttpHandlerFactory
klasse 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>
Direktiven werden in einer sequenziellen Top-Down-Reihenfolge 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;}
Notiz
Wenn der Sitzungszustand in Ihrem HTTP-Handler erforderlich ist, müssen Sie auch die IRequiresSessionState
Schnittstelle implementieren.