Unterschied von HttpModule & HttpHandler?

imageManche Sachen sind so trivial, dass man gar nicht mehr nachschaut. Da wird mal von einem “HttpModule” geredet (grundsätzlich sind “Module” ja so oder so immer ein gutes Schlagwort ;) ) oder von einem “HttpHandler”. Damit ich mir endlich mal merken kann, was genau die Unterscheidung zwischen den beiden ist, schreibe ich jetzt den Blogpost ;)

Ein “HttpHandler”:

Peter Bucher hat eine sehr nette Erklärung dazu geschrieben:

Ein Handler kann sich als Teil des Prozesses vorgestellt werden, der bei einem Request abgearbeitet wird.
Wenn ein Request eintrifft, wird anhand von Mappings entschieden, welcher Handler den Request abarbeitet.

In ASP.NET gibt es schon mehrere bestehende Handler, der bekannteste von ihnen ist der Page Handler der auf alle Dateianforderungen mit der Endung *.aspx reagiert.
Webservices *.asmx gehen auch durch einen spezifischen Handler. Sowie bspw. WebResource.axd.
Die Klasse "Page", die bzw. deren Ableitungen für jede ASPX Seite benutzt wird, stellt den oben genannten Handler dar.
”

In dem Post hat er noch allerlei Hintergrundinformation und auch ein Beispiel. Natürlich gibt es auch einen MSDN Artikel dazu.

Fazit: Ein Handler reagiert am Ende des Requests auf irgendwas.

Wenn man einen eigenen HttpHandler erstellen möchte, dann muss man die Schnittstelle IHttpHandler implementieren und man muss den Handler z.B. in der web.config registrieren nach dem Motto: “Du reagierst jetzt auf alle seitenname.helloWorld GET Aufrufe.” Ich verweise nochmal auf den Post von Peter, weil er dort alles sehr gut erklärt hat :)

Was bedeutet die “IsReuseable” Property im IHttpHandler Interface?

Wenn man dort “true” zurück gibt, cacht die Applikation den HttpHandler. So könnte man z.B. im Konstruktor des HttpHandler einmal Daten laden und pro Request würde immer der gleiche Zustand benutzt werden. Das kann natürlich auch negative Aspekte haben. Der Stackoverflow Thread hat mir zu dem Thema sehr geholfen.

Ein “HttpModule”:

HttpModule darf man sich wie Filter vorstellen. So gibt es z.B. ein Authentifzierungs-Modul usw. Diese reichen den Request durch oder manipulieren ihn. Ein HttpModule kann z.B. ein Redirect durchführen.

Um ein eigenes HttpModule zu bauen, muss man die Schnittstelle IHttpModule implementieren und das HttpModule auch registrieren. Am Ende geht der Request, wenn er von einem HttpModule nicht “abgelenkt” oder “beendet” wird, durch die verschiedenen Module und kommt irgendwann zu seinem HttpHandler.

Kleines Schaubild:

image

So in etwa sollte der Ablauf sein. Natürlich könnte auch ein HttpModule bereits die Response zurück schicken und so den Verlauf des Requests beeinflussen.

Das Post beschreibt keine Raketenwissenschaft, aber manchmal ist es ganz nützlich zu wissen, wo die Unterschiede liegen ;)


Kick It auf dotnet-kicks.de
Wenn dir der Blogpost gefallen hat, dann hinterlasse doch einen Kommentar. Wenn du auf dem Laufenden bleiben willst, abonniere unseren RSS Feed oder folge uns auf Twitter.

About the author

Written by Robert Mühsig

Robert Mühsig (@robert0muehsig) ist Webentwickler und beschäftigt sich mit Web-Frameworks (vor allem dem ASP.NET MVC Framework) und scheut sich auch nicht vor Javascript. Ansonsten bloggt er über all jene Probleme, die ihm über den Weg laufen. Seit 2008 ist er Microsoft MVP für ASP.NET und er arbeitet bei der T-Systems Multimedia Solutions GmbH in Dresden. Treffen kann man ihn online via Twitter (@robert0muehsig) oder dieser Seite oder bei der .NET User Group Dresden.

6 Responses

  1. Ja die kleinen Feinheiten können große Verwirrungen stiften.
    Was “IsReuseable” bedeutet ist auch gut zu wissen.

    Reply
  2. Mal ganz davon abgesehen, dass ich mir das jetzt auch endlich mal merken kann: Muss es nicht “zwischen” statt “von” heißen?

    greez

    Reply
  3. Evtl. ja. Vielleicht. Ich lass es jetzt einfach so ;)

    Reply
  4. Danke. Ich habe bei Google nach “Unterschied httphandler und httpmodul” und bin auf anhieb hier gelandet. Genau was ich wissen wollte.

    Wo hast du nochmals den Flattr Button versteckt? :-)

    Reply
  5. Guter Beitrag!

    Reply

Comment on this post

Letzte Posts

  • Carriage Return / Neue Zeile in Textareas

    Eine kleine Aufgabe: Jede neue Textzeile (Carriage Return/Wenn man Enter drückt ) in einer Textarea soll ein Element in einer Auflistung sein – wie mach ich das jetzt am einfachsten? Eigentlich ein grundlegendes Element im Web und der Nutzer macht bewusst Absätze – daher wäre es nur gerecht, wenn man das auch entsprechend würdigt. Kleine ...

  • image.png
    Doom, Quake, Wolfenstein & co. Source Code auf GitHub

    id Software, die Macher von Doom, Quake, Wolfenstein & co., stellen regelmäßig ihre älteren Spieltitle als Open Source zur Verfügung. Das Ganze runterzuladen fand ich bisher immer recht mühselig, allerdings gibt es seit kurzer Zeit die Sourcen auch auf GitHub. Darunter Spiele wie Doom 3, Quake 3, Wolfenstein für iOS. Wer also schon immer mal ...

  • image.png
    Twitter Bootstrap 2.0 released & “Release Präsentation”

    Wie bereits vom Twitter Bootstrap Team angekündigt wurde offiziel die Version 2.0 des UI Toolskits “Twitter Bootstrap” veröffentlich. Zudem wurden die Slides, welche bei der Release Party gezeigt wurden auch veröffentlicht: Downloads finden sich auf der Twitter Bootstrap Seite auf GitHub. Wenn dir der Blogpost gefallen hat, dann hinterlasse doch einen Kommentar. Wenn du auf ...

  • image.png
    Javascript zu Dart Translator

    Dart, Google Javascript Alternative, wurde vor ein paar Monaten vorgestellt und die Webentwickler Szene ist noch etwas gespalten, ob Dart nun überflüssig ist oder einfach nur cool und längst überfällig ist. Um die Sprache näher zu erläutern hat Google die grundlegenden Javascript Basics nach Dart übersetzt. Das Ergebnis ist der “Translator”. Der Name mag momentan ...

  • Twitter Bootstrap 2.0–“Beta”

    Twitter Bootstrap, ein UI-Toolkit für Web-Applikationen von Twitter, erscheint (wie bereits berichtet) demnächst in der Version 2.0. Der offizielle Release ist am 31. Januar, allerdings beginnt jetzt laut Mark Otto (einer der Hauptentwickler von Twitter Bootstrap) die intensive Test-Phase. Das heisst, das es nun offiziel auch die 2.0 Dokumentation online gibt. Im Vergleich zur aktuellen ...

Support us!

Facebook