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 :)
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 :)
Antworten:
In HttpHandler steuert der Anforderungszug. HttpModule ist eine Station auf dem Weg.
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
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
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.
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.
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.
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.
HttpHandler ist für die Verarbeitung der http-Anforderung durch Erweiterung verantwortlich, während HttpModule auf Ereignisse im Anwendungslebenszyklus reagiert.
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. “
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.
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.