2010-03-11 145 views
28

假設FirstModuleSecondModule都處理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 2010-03-11 19:04:51

+8

不應該依賴於它是的,不是因爲它不起作用,而是因爲設計考慮和促進模塊之間的鬆散耦合。但是不存在模塊排序與配置文件中的排序不同的情況。希望這可以幫助。 – 2010-03-22 08:40:26

+0

看起來您可以訂購它們,但訂購似乎已鎖定,您必須解鎖條目以影響實際訂購。 – jamiebarrow 2011-08-17 14:53:01

-1

我不認爲您可以保證或指定httpmodules將運行的命令。如果SecondModule依賴於FirstModule,將它們的功能組合到1個httpmodule中可能會更好。

+4

我有一個UrlRewriting第三方HttpModule,我真的很希望能夠在它到達第三方HttpModule之前攔截請求。 – jessegavin 2010-03-11 18:26:42

+0

您可能可以將事件處理程序附加到在urlrewriting模塊關心的事件之前觸發的事件。所以如果UrlRewriting只處理EndRequest,你可以附加到BeginRequest。 – 2010-03-11 19:17:36