【问题标题】:How is the order of execution for HttpModules determined?HttpModules 的执行顺序是如何确定的?
【发布时间】:2010-03-11 18:05:52
【问题描述】:

假设FirstModuleSecondModule 都处理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>

还有其他方式可以指定顺序吗?

【问题讨论】:

    标签: asp.net web-config httpmodule


    【解决方案1】:

    根据this forum post,HttpModules 是按照它们注册的顺序执行的。这对我来说很有意义,因为否则 &lt;clear&gt;&lt;remove&gt; 指令也不会按预期工作,例如当这样使用时:

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

    【讨论】:

    • 论坛帖子中有人这么说。但是也有几个人说你不应该依赖它。
    • 不应该依赖它是的,不是因为它不起作用,而是因为设计考虑和促进模块之间的松散耦合。但是没有任何情况下模块的顺序会与配置文件中的不同。希望这会有所帮助。
    • 看起来你可以订购它们,但是订购似乎被锁定了,你必须解锁条目才能影响实际订购。
    • @jamiebarrow 我有兴趣了解更多关于此的信息。您是否有一个 url 或某种资源,您可以在其中找到有关锁定/解锁的信息。
    • 在花时间回答这个问题之前也要检查一下。 stackoverflow.com/a/14974151/398715
    【解决方案2】:

    根据微软出版社的Internet Information Services (IIS) 7.0 Resource Kit 书籍摘录,

    要解决此类相对排序依赖关系,管理员可以通过更改模块在模块部分中列出的顺序来控制模块的相对排序。

    之所以有效,是因为服务器使用模块配置部分中的顺序来对每个请求处理阶段的模块执行进行排序。通过在列表中将模块 A 放在模块 B 之前,您可以让模块 A 在模块 B 之前执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2011-10-05
      • 1970-01-01
      • 2011-08-08
      相关资源
      最近更新 更多