2010-03-11 9 views
28

Supongamos que FirstModule y SecondModule manejan el evento Application_BeginRequest. ¿Se ejecutará en el orden definido en web.config?¿Cómo se determina el orden de ejecución de HttpModules?

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

¿Hay otras formas en que se puede especificar la orden?

Respuesta

31

Según this forum post, los HttpModules se ejecutan en el orden en el que se registraron. Esto tiene sentido para mí, porque de lo contrario las directivas <clear> y <remove> tampoco funcionarían como se esperaba, p. cuando se usa de esta manera:

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

Alguien en el mensaje del foro SÍ dice eso. Sin embargo, hubo varias personas que también dijeron que no deberías depender de ello. – jessegavin

+8

No debería depender de eso sí, no porque no funcione, sino por consideraciones de diseño y promoción de un acoplamiento flexible entre los módulos. Pero no hay casos en que el orden de los módulos sea diferente a lo que está en el archivo de configuración. Espero que esto ayude. –

+0

Parece que puede pedirlos, sin embargo, el pedido parece estar bloqueado, y debe desbloquear las entradas para afectar el orden real. – jamiebarrow

-1

No creo que pueda garantizar ni especificar un pedido en el que se ejecutarán httpmodules. Si SecondModule depende de FirstModule, es mejor combinar su funcionalidad en 1 httpmodule.

+4

Tengo una tercera parte HttpModule cual hace UrlRewriting, realmente me gustaría ser capaz de interceptar la solicitud antes de que llegue a la tercera parte HttpModule. – jessegavin

+0

Es posible que pueda conectar su controlador de eventos a un evento que se active antes de los eventos que le importa al módulo urlrewriting. Entonces, si UrlRewriting solo maneja EndRequest, puede adjuntarlo a BeginRequest. –

Cuestiones relacionadas