2010-03-11 3 views
28

Предположим, что оба FirstModule и SecondModule обрабатывают событие Application_BeginRequest. Будет ли выполняться в порядке, определенном в web.config?Как определяется порядок выполнения для HttpModules?

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

Есть ли другие способы, которыми может быть задан заказ?

ответ

31

Согласно this forum post, HttpModules выполняются в том порядке, в котором они были зарегистрированы. Это имеет смысл для меня, потому что в противном случае директивы <clear> и <remove> также не будут работать должным образом, например. когда используется как это:

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

Кто-то на форуме пост. Это говорит. Однако было несколько человек, которые также сказали, что вы не должны зависеть от этого. – jessegavin

+8

Не следует зависеть от этого, да, не потому, что он не работает, а из-за соображений дизайна и содействия ослаблению связи между модулями. Но нет случаев, когда порядок модулей будет отличаться от того, что находится в файле конфигурации. Надеюсь это поможет. –

+0

По-видимому, вы можете заказать их, однако порядок блокировки, и вы должны разблокировать записи, чтобы повлиять на фактический порядок. – jamiebarrow

-1

Я не думаю, что вы можете гарантировать или указать заказ, в котором будет запущен httpmodules. Если SecondModule зависит от FirstModule, может быть лучше просто объединить свои функции в 1 httpmodule.

+4

У меня есть 3 участника HttpModule, который делает UrlRewriting, я действительно хотел бы быть в состоянии перехватить запрос, прежде чем он достигнет 3 участника HttpModule. – jessegavin

+0

Возможно, вы сможете подключить обработчик событий к событию, которое запускается до событий, которые волнует модуль urlrewriting. Поэтому, если UrlRewriting обрабатывает только EndRequest, вы можете подключиться к BeginRequest. –