HTTP-Handler vs HTTP-Modul


144

Kann jemand in weniger als 2 Sätzen den Unterschied zwischen beiden erklären? Ja, ich weiß, dass Google Hunderte von Antworten liefern kann, aber nicht einen von zwei klaren Sätzen :)


Im Zusammenhang mit der Suche nach Code vor jeder Anfrage.
Frenchie

23
+1 für "Ja, ich weiß, ich kann es googeln".
Csharp

7
"Weniger als zwei Sätze." Wie ein Satz?
Andrew Theken

Antworten:


316

In HttpHandler steuert der Anforderungszug. HttpModule ist eine Station auf dem Weg.


Wunderbare Erklärung! :)
SO Benutzer

3
Ich bin damit einverstanden, dass dies eine gute Antwort ist, kann jedoch nicht als akzeptierte Antwort markiert werden.
Shrivallabh

Einfach genial !! :)
Dee

4
Technisch gesehen nicht "weniger als zwei Sätze". <kontrollface>
Andrew Theken

5
Nett. Ich würde hinzufügen, dass HttpContext der Zug ist. Jede Station (Modul) trägt im Vorbeigehen auf irgendeine Weise zu HttpContext bei.
Duanne

203

Die zwei Sätze:

Ein HttpModule wird unabhängig von der Erweiterung für jede Anforderung an Ihre Anwendung ausgeführt und im Allgemeinen für Dinge wie Sicherheit, Statistik, Protokollierung usw. verwendet.

Ein HttpHandler ist im Allgemeinen einer bestimmten Erweiterung zugeordnet und wird beispielsweise für RSS-Feeds, die Erzeugung oder Änderung dynamischer Bilder und dergleichen verwendet.

Ein bisschen mehr Erklärung, wenn das nicht ganz klar ist:

So wie ich sie mir vorstelle - Module "schließen" sich an die Anforderungspipeline an, während Handler eine bestimmte Dateierweiterung "behandeln". Wenn Sie also eine Site mit einem LoggingModule und einem PdfHandler haben, werden beide für eine Anforderung an http://example.com/sample.pdf ausgeführt , und das Protokollierungsmodul wird nur für eine Anforderung an http: // ausgeführt example.com/page.aspx .

Es gibt einen ziemlich klaren Artikel über den Unterschied bei MSDN: Übersicht über HTTP-Handler und HTTP-Module


1
OK, wenn ich also Code ausführen möchte, der bei jeder Anforderung an eine ASPX-Datei ausgeführt wird, implementiere ich einen Handler, und wenn ich bei jeder Anforderung Code ausführen möchte, unabhängig vom angeforderten Dateityp, implementiere ich ein Modul. Ist es das?
Frenchie

5
@frenchie - Nein, Aspx-Seiten bauen auf HttpHandlers auf, indem sie Ihnen den Seitenlebenszyklus zur Verfügung stellen. Stellen Sie sich das als eine Aspx-Seite vor, die auf das grundlegende Ereignis reduziert ist. ProcessRequest. Das Modul hingegen wird zu jedem Zeitpunkt im Lebenszyklus ausgeführt, zu dem Sie es verkabeln. Für Ihr Szenario, in dem Sie etwas vor der aspx-Seite ausführen möchten, möchten Sie ein Modul. Sie müssen jedoch die Anforderungen für Seiten, die nicht .aspx
Phill

6
Stimmt es, dass jede Anfrage nur einen Handler und mehrere Module enthalten kann?
Maarten Kieft

1
Ist die allgemeine Antwort von Handlern = Zustand und Module kein ungeschriebener Standard oder gibt es etwas grundlegend anderes als die beiden? Ich meine, könnte eine Person ein Modul so codieren, dass es wie ein Handler ist und umgekehrt, oder gibt es Einschränkungen für diejenigen, die es unmöglich machen?
Rich Bianco

21

Das Hauptziel von HttpHandler und HttpModule besteht darin, Vorverarbeitungslogik einzufügen, bevor die ASP.NET-Anforderung den IIS-Server erreicht.

ASP.NET bietet zwei Möglichkeiten zum Einfügen von Logik in die Anforderungspipeline.

  1. HTTP-Handler: Der HTTP-Handler hilft uns, die Vorverarbeitungslogik basierend auf der Erweiterung des angeforderten Dateinamens einzufügen. ASP.NET verwendet HTTP-Handler, um viele seiner eigenen Funktionen zu implementieren. Beispielsweise verwendet ASP.NET Handler zum Verarbeiten von ASPX-, ASMX- und Trace.axd-Dateien.

Beispiel: RSS-Feeds: Um einen RSS-Feed für eine Website zu erstellen, können Sie einen Handler erstellen, der RSS-formatiertes XML ausgibt. Wenn Benutzer eine Anfrage an Ihre Site senden, die mit .rss endet, ruft ASP.NET Ihren Handler auf, um die Anfrage zu verarbeiten.

Das Erstellen von Handler 1 umfasst drei Schritte. Implementieren Sie die IHttpHandler-Schnittstelle. 2. Registrieren Sie den Handler in der Datei web.config oder machine.config. 3. Ordnen Sie die Dateierweiterung (* .arshad) aspnet_isapi.dll im IIS zu.

Die IHttpHandler-Schnittstelle verfügt über die ProcessRequest-Methode und die IsReusable-Eigenschaft, die implementiert werden müssen. ProcessRequest: In dieser Methode schreiben Sie den Code, der die Ausgabe für den Handler erzeugt. IsResuable: Diese Eigenschaft gibt an, ob dieser Handler wiederverwendet werden kann oder nicht.

Sie können den Handler wie folgt in der Datei web.config registrieren

<httpHandlers>
   <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" />
</httpHandlers>

Hinweis: Hier behandeln wir jeden Dateinamen mit der Erweiterung arshad.

  1. HTTP-Module: HTTP-Modul ist ein ereignisbasierter Prozessor zum Einfügen von Vorverarbeitungslogik, bevor die Anforderung den IIS-Server erreicht. ASP.NET verwendet das HTTP-Modul, um viele seiner eigenen Funktionen wie Authentifizierung und Autorisierung, Sitzungsverwaltung und Ausgabe-Caching usw. zu implementieren.

Die ASP.NET-Engine gibt viele Ereignisse aus, wenn die Anforderung die Anforderungspipeline durchläuft. Einige dieser Ereignisse sind AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. Mit HttpModule können Sie Logik in diese Ereignisse schreiben. Diese Logik wird ausgeführt, wenn die Ereignisse ausgelöst werden und bevor die Anforderung IIS erreicht.

Das Erstellen von Modulen umfasst zwei Schritte: 1. Implementieren der IHttpModule-Schnittstelle 2. Registrieren des Moduls in der Datei web.config oder machine.config

Beispiel: Sicherheit: Mit dem HTTP-Modul können Sie eine benutzerdefinierte Authentifizierung oder andere Sicherheitsüberprüfungen durchführen, bevor die Anforderung IIS erreicht.


19

Der HTTP-Handler ist der Prozess, der als Antwort auf eine Anforderung an eine ASP.NET-Webanwendung ausgeführt wird. Mit HTTP-Modulen können Sie eingehende und ausgehende Anforderungen untersuchen und basierend auf der Anforderung Maßnahmen ergreifen.


1
In diesem Sinne kann ein Aspx als eine Art httphandler betrachtet werden?
Frenchie

17
Ja Frenchie. Öffnen Sie den Code hinter jedem Aspx. Sie sehen: öffentliche Teilklasse gut: System.Web.UI.Page Klicken Sie nun mit der rechten Maustaste auf Seite und klicken Sie auf Zur Definition. Sie sehen: öffentliche Klasse Seite: TemplateControl, IHttpHandler
Aditya Bokade

5

HttpHandler ist für die Verarbeitung der http-Anforderung durch Erweiterung verantwortlich, während HttpModule auf Ereignisse im Anwendungslebenszyklus reagiert.


2

Schöner Artikel darüber HttpModule-and-HttpHandlers

Referenz: INFO: Übersicht über ASP.NET-HTTP-Module und HTTP-Handler

„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. Handler werden verwendet, um einzelne Endpunktanforderungen zu verarbeiten. Mithilfe von Handlern kann ASP.NET Framework einzelne HTTP-URLs oder Gruppen von URL-Erweiterungen innerhalb einer Anwendung verarbeiten. Im Gegensatz zu Modulen wird nur ein Handler zum Verarbeiten einer Anforderung verwendet. “


Vielen Dank, es hilft mir sehr
Rahul Chowdhury

1

Im HTTP-Handler wird die Kompilierung basierend auf den Einstellungen durchgeführt. Wenn die Seitenerweiterung beispielsweise .aspx ist, wird sie über system.web.Ui.Pagahandlefactory kompiliert. Sobald die Kompilierung bei HTTP-Handle abgeschlossen ist, wird die Anforderung über das HTTP-Modul und IIS ausgeführt.


0

HTTP-Handler

Der HTTP-Handler ist der Prozess, der als Antwort auf eine HTTP-Anforderung ausgeführt wird. Wenn ein Benutzer eine Datei anfordert, wird diese vom Handler basierend auf der Erweiterung verarbeitet. Daher werden benutzerdefinierte http-Handler erstellt, wenn Sie eine spezielle Behandlung basierend auf der Dateinamenerweiterung benötigen. Betrachten wir ein Beispiel zum Erstellen von RSS für eine Site. Erstellen Sie also einen Handler, der RSS-formatiertes XML generiert. Binden Sie nun die Erweiterung .rss an den benutzerdefinierten Handler.

HTTP-Module

HTTP-Module werden in den Lebenszyklus einer Anforderung eingebunden. Wenn eine Anforderung verarbeitet wird, wird sie durch alle Module in der Pipeline der Anforderung geleitet. Daher werden http-Module im Allgemeinen verwendet für:

Sicherheit: Zum Authentifizieren einer Anfrage, bevor die Anfrage bearbeitet wird.

Statistik und Protokollierung: Da Module für jede Anforderung aufgerufen werden, können sie zum Sammeln von Statistiken und zum Protokollieren von Informationen verwendet werden.

Benutzerdefinierter Header: Da die Antwort geändert werden kann, können der Antwort benutzerdefinierte Headerinformationen hinzugefügt werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.