9

Unser Shop integriert ASP.NET MVC in eine große Webanwendung, die benutzerdefinierte & 3rd-Party-HTTP-Handler verwendet, die in web.config unter system.webServer \ handlers definiert sind. Die Verwendung von HTTP-Handlern auf diese Weise war für uns großartig, weil wir die App nicht neu kompilieren müssen oder die tatsächliche Handler-Seite für jede Instanz des Produkts irgendwo auf dem Datenträger irgendwo im Web-Bereich liegen haben muss.Warum hat das ASP.NET-Routing Vorrang vor dem web.config-Http-Handler-Abschnitt?

Ist es wirklich notwendig explizite Ignoriere Routen in unserer global.asax hinzuzufügen, damit die Runtime unsere in web.config definierten Handler berücksichtigen kann? Ich hätte gedacht, Web.Routing würde aufgerufen werden nach die Handler in system.webServer \ Handler definiert wurden überprüft (nicht anders herum).

Wir verwenden ein modulares Design, das das Hinzufügen/Entfernen von Handlern aus web.config ermöglicht, wenn Features hinzugefügt werden. Mit der Einführung des MVC-Routings scheint es notwendig zu sein, in der global.asax-Datei für jeden in der Datei web.config definierten möglichen Handler Ignorier-Routen hinzuzufügen.

Beachten Sie, dass die eigentliche Datei für diese Handler nicht auf der Festplatte vorhanden ist - sie sind virtuell und in einer Assembly eingebettet. Hier ist ein Beispiel für eine 3rd-Party-Handler, der jetzt eine explizite Ignorieren Strecke in global.asax erfordert:

<system.webServer> 
    <handlers> 
      <!-- telerik radcontrols --> 
      <add name="TelerikDialogHandler" verb="*" path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler, Telerik.Web.UI, Version=2009.1.402.20, Culture=neutral, PublicKeyToken=121fae78165ba3d4"></add> 
    </handlers> 
</system.webServer> 

Also für die Aufzeichnung, wenn Sie verwenden System.Web.Routing müssen Sie ignorieren die Routen für Http Handlers in Web angegeben sind: .Konfig? Oder mache ich etwas falsch?

+3

Routing ist als HttpModule implementiert, so dass es immer vor der Auswahl von HttpHandler verarbeitet wird. –

+1

Warum postest du das nicht als Antwort Ladislav, also wirst du von ihm repetieren. –

Antwort

2

ASP.NET-Anfrageverarbeitung basiert auf einem Pipeline-Modell, in dem ASP.NET HTTP-Anforderungen an alle Module in der Pipeline weiterleitet. Jedes Modul empfängt die http-Anfrage und hat die volle Kontrolle darüber. Sobald die Anforderung alle HTTP-Module durchläuft, wird sie schließlich von einem HTTP-Handler verarbeitet. Der HTTP-Handler führt eine Verarbeitung für ihn durch, und das Ergebnis wird erneut durch die HTTP-Module in der Pipeline geleitet.

Ich denke, dass der beste Weg, darüber nachzudenken ist, dass HttpModule ein Filter ist, der etwas aus dem Anfrageobjekt hinzufügt oder subtrahiert, wenn ein Ereignis auftritt und der HttpHandler ein Prozessor ist, der die Anfrage tatsächlich bedient. Der ASP.NET-Anforderungslebenszyklus ist so eingerichtet, dass alle Filter zuerst auf die Anforderung angewendet werden, bevor verarbeitet wird.

+0

Danke Jonas für die Erweiterung. Wir haben beschlossen, eine Master-Liste aller möglichen Http-Handler als ignorierende Routen für jede App-Instanz anzuordnen, um das Verhalten zu vermeiden (auch wenn einige unserer App-Instanzen einige der Handler nicht verwenden). –

Verwandte Themen