Damit Sie eine Klasse, die IHttpHandler
genannt implementiert: MyHandler
und es ist im Namensraum Example
, müssen Sie die folgenden Einträge in der Website Web.Config
im httpHandlers Abschnitt machen:
<httpHandlers>
<add verb="*" path="*" type="Example.MyHandler"/>
</httpHandlers>
Da diese alle URLs umleitet Für Ihre Website/Anwendung zu Ihrem Handler müssen Sie überlegen, wie Sie statische Inhalte (Imgs, Skripte, Stylesheets usw.) bereitstellen können. Eine Möglichkeit ist, eine solche statische Inhalte in einer einheitlichen URL zu speichern, wie http://example.com/static/...
, können Sie dann Ihren Handler als solche eingestellt:
<httpHandlers>
<add verb="*" path="*" type="Example.MyHandler"/>
<add verb="GET,HEAD" path="static/*" type="System.Web.StaticFileHandler" />
</httpHandlers>
Für Ihren lokalen dev Webserver (Embedded in Visual Studio) dies ist alles, was benötigt wird. Für IIS müssen Sie IIS außerdem mitteilen, wie mit diesen URLs verfahren wird (da der Server zuerst eine Anfrage analysiert, um zu entscheiden, wohin er gesendet werden soll - einschließlich, ob er an ASP.NET oder eine andere Erweiterung gesendet werden soll).
- Geöffnet: IIS-Manager ->
- Abschnitt: Websites ->
- Recht auf Ihrer Website klicken ->
- Option: Eigenschaften ->
- Tab: Home Directoy ->
- Schaltfläche: [Konfiguration ...] ->
- Registerkarte: Zuordnungen ->
- Abschnitt: "Wildcard-Anwendungskarten (Reihenfolge der Implementierung) : "->
- Schaltfläche: [Einfügen ...] ->
- Executable: "C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll" (oder was auch immer Version des .NET-Runtime-Handler verwendet) ->
- Uncheck „Stellen Sie sicher, dass Datei existiert“->
- Button: [OK]
Jetzt IIS und ASP.NET wissen, wie mit Ihrem URLS beschäftigen.
Der obige Ansatz bedeutet, dass bei der Anforderung von statischen Dateien, ASP.NET tatsächlich die Dateien, nicht IIS dient - was zu einigen Nachteilen führt (diskutiert here). Sie können dieses Verhalten überschreiben (die Zuordnung von Platzhaltern aus dem statischen Verzeichnis deaktivieren), indem Sie das Verzeichnis in eine Anwendung (im IIS-Manager) umschalten, die oben hinzugefügte Wildcard-Mapping-Anweisung entfernen und sie aus einer Anwendung zurückschalten. Voilà - statische Dateien werden von IIS behandelt, ohne Ihren ASP.NET zu belästigen.
Können Sie erklären "Ich würde keinen HTTP-Handler dafür verwenden."? Soweit ich weiß HTTP-Handler bieten eine bessere Leistung als eine normale ASPX-Seite und ich sehe keinen Nachteil der HTTP-Handler Weg. –
Seitenrouting ist einfacher und bietet mehr Flexibilität. Es wurde genau für das entwickelt, was Sie beschrieben haben. Es ist möglich, dass ein HTTP-Handler schneller ist, aber das liegt daran, dass ein Teil der Unterstützung für ASP.NET-Seiten nicht ausgeführt/geladen wird. Ich habe gerade einen benutzerdefinierten HTTP-Handler implementiert. Es funktioniert großartig. Aber ich denke nicht, dass es der richtige Ansatz für das ist, was Sie beschrieben haben. –
Vielen Dank für Ihre Antwort ... können Sie mehr ausarbeiten, was Sie mit "geradlinig und bietet mehr Flexibilität"? Ich sehe HTTP-Handler-Ansatz sehr einfach und unkompliziert. Können Sie genauer bestimmen, wie die URL-Routing-Lösung aussieht? Rudu war sehr ausführlich in seiner Antwort. Danke nochmal Jonathan. –