asp.net benutzerdefinierte HttpHandler und URL-routing
Möchte ich behandeln die Anfragen an meine Anwendung "http://example.com/whateverpath" durch eine eigene HttpHandler aber die Rückkehr der Dinge in Abhängigkeit von dem Wert von "whateverpath".
Damit Benutzer mit Zugriff auf "http://example.com/path1" wird bekommen andere Antwort als Benutzer mit Zugriff auf "http://example.com/path2" aber sowohl Anfrage verarbeitet werden müssen, in der gleichen HttpHandler. Die Idee ist finden, "whateverpath" in eine Datenbank und je nach Ergebnis, die Antwort zurückgegeben Inhalte.
Höre ich über das URL-routing, und ich habe bereits einen benutzerdefinierten Http-handler funktioniert, aber kann ich die kombinieren beide Verfahren, um zu bekommen, was ich brauche?
Ich Schätze jeden Kommentar hinsichtlich dieses Problems.
Cheers
Frank Abel
InformationsquelleAutor gsi-frank | 2010-12-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also haben Sie eine Klasse, die
IHttpHandler
genannt:MyHandler
und es ist im namespaceExample
lassen, müssen Sie die folgenden Einträge in die WebsiteWeb.Config
im httpHandlers Abschnitt:Seit dieser leitet alle URLs für Ihre Website/Anwendung auf Ihrem handler, den Sie haben zu prüfen, wie die Verarbeitung statischer Inhalte (img, scripts, style-sheets etc.). Eine Möglichkeit ist die Speicherung von statischen Inhalten in einer einheitlichen URL wie
http://example.com/static/...
können Sie dann festlegen, dass Ihr Behandler als solche:Ihrem lokalen dev-webserver (embedded Visual Studio) das ist alles, was benötigt wird. Für IIS müssen Sie auch sagen, IIS Umgang mit diesen URLS (da die server die ersten Analysen eine Anforderung, um zu entscheiden, wo es zu senden - einschließlich der Frage, ob, um es zu senden ASP.NET oder eine andere Erweiterung).
Nun sowohl IIS und ASP.NET wissen, wie man mit Ihren URLS.
Dem obigen Ansatz bedeutet, dass beim anfordern von statischen Dateien ASP.NET tatsächlich dienen die Dateien, die nicht von IIS -, die dazu führt, ein paar Nachteile (siehe hier). Sie können override dieses Verhalten (deaktivieren Platzhalterzeichen-Zuordnung vom statischen directory) wechseln Sie das Verzeichnis in eine Anwendung (im IIS Manager), entfernen Sie das wildcard-mapping-Aussage (oben Hinzugefügt), und schalten Sie es wieder aus einer Anwendung. Voilà - statische Dateien von IIS verarbeitet, ohne Belästigung Ihre ASP.NET.
InformationsquelleAutor Rudu
Ich nicht empfehlen, die Kombination von URL-routing und HTTP-Handler.
Scheint dies der perfekte job für URL-routing. Allerdings würde ich nicht verwenden, um einen HTTP-handler.
Einfach anzeigen "~/CustomData/whateverpath" an eine ASPX-Seite. Dann haben die das laden der Seite die Daten aus der Datenbank. Afterall, wenn die Logik um die Daten ist die gleiche, egal was "whateverpath" ist, wollen Sie nicht zu wiederholen, Ihre Logik für jede Variante. Stattdessen möchten Sie eine Karte in einer einzigen Datei, laden Sie die richtigen Daten für alle Fälle.
HTTP-Handler sind eine ganz andere Sache und sollte nicht für diesen Zweck verwendet werden. (BTW, ich habe gerade einen Artikel veröffentlicht, der auf HTTP-Handler. Sie können es bei http://www.blackbeltcoder.com/Articles/asp/writing-a-custom-http-handler-in-asp-net).
Seite routing ist mehr geradlinig und bietet mehr Flexibilität. Es wurde entworfen für genau das, was Sie beschrieben. Es ist möglich für einen HTTP-handler, schneller zu sein, aber das ist, weil ein Teil der Unterstützung für ASP.NET Seiten wird nicht ausgeführt/geladen. Ich habe gerade durch das implementieren eines benutzerdefinierten HTTP-handler. Es funktioniert Super. Aber ich glaube nicht, dass es der richtige Ansatz für das, was Sie beschrieben.
Vielen Dank für Ihre Antwort... können Sie mehr erarbeiten, was du meinst mit "straight forward und bietet mehr Flexibilität"? Ich sehe HTTP-handler Ansatz sehr einfach und straight forward. Neben, können Sie mehr spezifische, wie die Aussehen würde, wie die URL-routing-Lösung? Rudu war wirklich ausführlich in seiner Antwort. Nochmals vielen Dank Jonathan.
weblogs.asp.net/scottgu/archive/2009/10/13/...
Könnte wahr sein, aber nicht helfen, mit alten Situationen.
InformationsquelleAutor Jonathan Wood
First off, würde ich mich den vorherigen post von Jonathan Holz, das unter Verwendung von routing innerhalb HttpHandler, ist keine gute Idee. Aber ich bin ziemlich sicher, dass er bezog sich auf die standard-MVC routing gibt.
Würde ein guter Ansatz in der Verwendung von benutzerdefinierten routing. Ich veröffentlichte einen Artikel über die it - Basic-Routing für HttpHandler
InformationsquelleAutor vitaly-t