Meine Frage ist einfach (obwohl die Antwort höchstwahrscheinlich nicht lautet): Ich versuche zu entscheiden, wie ein serverseitiger Upload-Handler in C # / ASP.NET implementiert wird.
Ich habe sowohl HttpModules (IHttpModule-Schnittstelle) als auch HttpHandlers (IHttpHandler-Schnittstelle) verwendet, und mir fällt ein, dass ich dies mit beiden Mechanismen implementieren könnte. Mir fällt auch ein, dass ich die Unterschiede zwischen den beiden nicht verstehe.
Meine Frage lautet also: In welchen Fällen würde ich IHttpHandler anstelle von IHttpModule verwenden (und umgekehrt)?
Wird man in der Pipeline viel höher ausgeführt? Ist eine Konfiguration in bestimmten Situationen viel einfacher? Funktioniert man nicht gut mit mittlerer Sicherheit?
c#
asp.net
iis
httphandler
httpmodule
Dan Esparza
quelle
quelle
Antworten:
Ein ASP.NET- HTTP-Handler ist der Prozess (häufig als "Endpunkt" bezeichnet), der als Antwort auf eine Anforderung an eine ASP.NET-Webanwendung ausgeführt wird. Der am häufigsten verwendete Handler ist ein ASP.NET-Seitenhandler, der ASPX-Dateien verarbeitet. Wenn Benutzer eine ASPX-Datei anfordern, wird die Anforderung von der Seite über den Seitenhandler verarbeitet. Sie können Ihre eigenen HTTP-Handler erstellen, die benutzerdefinierte Ausgaben für den Browser rendern.
Typische Verwendungszwecke für benutzerdefinierte HTTP-Handler sind:
Ein HTTP-Modul ist eine Assembly, die bei jeder Anforderung an Ihre Anwendung aufgerufen wird. HTTP-Module werden als Teil der ASP.NET-Anforderungspipeline aufgerufen und haben während der gesamten Anforderung Zugriff auf Lebenszyklusereignisse. Mit HTTP-Modulen können Sie eingehende und ausgehende Anforderungen untersuchen und basierend auf der Anforderung Maßnahmen ergreifen.
Typische Verwendungszwecke für HTTP-Module sind:
Von: http://msdn.microsoft.com/en-us/library/bb398986.aspx
quelle
Wie hier angegeben , sind HttpModules einfache Klassen, die sich in die Anforderungsverarbeitungspipeline einbinden können, während sich HttpHandler von HttpModules nicht nur aufgrund ihrer Position in der Anforderungsverarbeitungspipeline unterscheiden, sondern auch, weil sie bestimmten Dateierweiterungen zugeordnet werden müssen.
quelle
IHttpModule
Wenn Sie viel mehr Kontrolle haben, können Sie im Grunde den gesamten Datenverkehr steuern, der an Ihre Webanwendung geleitet wird.IHttpHandler
gibt Ihnen weniger Kontrolle (der Datenverkehr wird gefiltert, bevor er Ihren Handler erreicht), aber wenn dies für Ihre Anforderungen ausreicht, sehe ich keinen Grund, die zu verwendenIHttpModule
.Wie auch immer, es ist wahrscheinlich am besten, Ihre benutzerdefinierte Logik in einer separaten Klasse zu haben und dann einfach diese Klasse von entweder
IHttpModule
oder zu verwendenIHttpHandler
. Auf diese Weise müssen Sie sich nicht wirklich um die Wahl des einen oder anderen kümmern. In der Tat könnte man eine zusätzliche Klasse , die Geräte erstellen beideIHttpHandler
undIHttpModule
dann entscheiden , was , indem Sie sich zu verwenden , beiWeb.config
.quelle
Module sollen Ereignisse verarbeiten, die von der Anwendung ausgelöst werden, bevor und nachdem die Anforderung tatsächlich vom Handler verarbeitet wurde. Handler hingegen haben nicht die Möglichkeit, Anwendungsereignisse zu abonnieren und stattdessen einfach ihre ProcessRequest-Methode aufzurufen, um die "Hauptarbeit" der Verarbeitung einer bestimmten Anforderung zu erledigen.
Schauen Sie sich diese Dokumentation von Microsoft an (etwa auf halber Strecke im Abschnitt "Die Anforderung wird von der HttpApplication-Pipeline verarbeitet"):
http://msdn.microsoft.com/en-us/library/bb470252.aspx
In Schritt 15 können Sie sehen, wo der Handler die Möglichkeit zur Ausführung erhält. Alle Ereignisse vor und nach diesem Schritt können von Modulen abgefangen werden, nicht jedoch von Handlern.
Abhängig davon, welche spezifischen Funktionen Sie erreichen möchten, können Sie entweder einen Handler oder ein Modul verwenden, um einen Upload-Handler zu implementieren. Möglicherweise verwenden Sie sogar beide.
Möglicherweise sollten Sie einen bereits geschriebenen Upload-Handler verwenden.
Hier ist eine kostenlose und Open Source-Version:
http://www.brettle.com/neatupload
Hier ist eine kommerzielle:
http://krystalware.com/Products/SlickUpload/
Wenn Sie sich die Dokumentation zu NeatUpload ansehen, werden Sie feststellen, dass Sie ein Modul konfigurieren müssen.
quelle
15 Sekunden hat ein schönes kleines Tutorial , das ein praktisches Beispiel gibt
quelle