Подтвердить что ты не робот

Как определяется порядок выполнения для HttpModules?

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

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

Существуют ли другие способы задания порядка?

4b9b3361

Ответ 1

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

<httpModules> 
   <clear/>
   <add... />
</httpModules>

Ответ 2

Согласно Справочнику по информационным ресурсам Internet Information Services (IIS) 7.0 из издательства Microsoft Press,

Чтобы разрешить такие зависимости относительного порядка, администратор может контролировать относительный порядок модулей, изменяя порядок, в котором они перечислены в разделе модулей.

Это работает, потому что сервер использует порядок в разделе конфигурации модулей, чтобы упорядочить выполнение модуля на каждом этапе обработки запроса. Поместив модуль A перед модулем B в списке, вы можете разрешить выполнение модуля A перед модулем B.

Ответ 3

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