2010-03-11 7 views
28

Angenommen, dass sowohl FirstModule als auch SecondModule das Ereignis Application_BeginRequest behandeln. Wird es in der Reihenfolge ausgeführt, die in der Datei web.config definiert ist?Wie wird die Reihenfolge der Ausführung für HttpModule bestimmt?

<httpModules> 
    <add type="MyApp.FirstModule, MyApp" name="FirstModule"/> 
    <add type="MyApp.SecondModule, MyApp" name="SecondModule"/> 
    <add type="OtherApp.OtherModule, OtherApp" name="OtherModule"/> 
</httpModules> 

Gibt es andere Möglichkeiten, die Reihenfolge anzugeben?

Antwort

31

Gemäß this forum post werden HttpModule in der Reihenfolge ausgeführt, in der sie registriert wurden. Dies ist für mich sinnvoll, weil sonst die <clear> und <remove> Direktiven auch nicht wie erwartet funktionieren würden, z. wenn so benutzt:

<httpModules> 
    <clear/> 
    <add... /> 
</httpModules> 
+0

Jemand im Forum post sagt das. Es gab jedoch mehrere Leute, die auch sagten, dass man sich nicht darauf verlassen sollte. – jessegavin

+8

Sollte nicht davon abhängen, ja, nicht weil es nicht funktioniert, sondern aufgrund von Design-Überlegungen und Förderung der losen Kopplung zwischen den Modulen. Es gibt jedoch keine Fälle, in denen die Reihenfolge der Module anders ist als in der Konfigurationsdatei. Hoffe das hilft. –

+0

Es scheint, dass Sie sie bestellen können, jedoch scheint die Bestellung gesperrt zu sein, und Sie müssen die Einträge entsperren, um die tatsächliche Bestellung zu beeinflussen. – jamiebarrow

-1

Ich glaube nicht, dass Sie eine Reihenfolge garantieren oder angeben können, in der httpmodules ausgeführt wird. Wenn SecondModule von FirstModule abhängig ist, ist es möglicherweise besser, nur ihre Funktionalität in 1 httpmodul zu kombinieren.

+4

Ich habe eine dritte Partei Httpmodule, welchen URLRewriting tut, würde ich wirklich in der Lage sein wie die Anforderung abzufangen, bevor es die 3rd-Party-Httpmodule erreicht. – jessegavin

+0

Sie können Ihren Ereignishandler möglicherweise an ein Ereignis anhängen, das vor Ereignissen ausgelöst wird, die für das Modul urlrewriting wichtig sind. Wenn also UrlRewriting nur EndRequest behandelt, können Sie an BeginRequest anhängen. –

Verwandte Themen