假设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>
是否还有其他方式可以指定订单?
答案 0 :(得分:34)
根据this forum post,HttpModules按照注册顺序执行。这对我来说很有意义,因为否则<clear>
和<remove>
指令也不会按预期工作,例如当像这样使用时:
<httpModules>
<clear/>
<add... />
</httpModules>
答案 1 :(得分:1)
根据Microsoft Press的Internet Information Services (IIS) 7.0 Resource Kit本书摘录
要解决此类相对排序依赖性,管理员可以通过更改模块在模块部分中列出的顺序来控制模块的相对排序。
之所以行之有效,是因为服务器使用模块配置部分中的命令来命令在每个请求处理阶段内执行模块。通过在列表中将模块A放在模块B之前,可以允许模块A在模块B之前执行。
答案 2 :(得分:-1)
我认为您无法保证或指定httpmodules将运行的订单。如果SecondModule依赖于FirstModule,最好将它们的功能合并为1个httpmodule。