0

在我的 web.config<system.webServer>部分中,我添加了我的自定义模块:

<modules>
    <add name="MyCustomModule" type="MyAssembly.MyCustomModule, MyAssembly" />
</modules>

然后在我的 HTTP 处理程序中,我遍历模块列表:

var allModules = HttpContext.Current.ApplicationInstance.Modules;
for( int i = 0; i < allModules.Count; i++ ) {
    Trace(allModules.GetKey(i));
}

我得到了这个清单:

__ASP_IntegratedDynamicModule_Shim
OutputCache
Session
FormsAuthentication
DefaultAuthentication
RoleManager
AnonymousIdentification
Profile
UrlMappingsModule
ServiceModel-4.0
UrlRoutingModule-4.0
ScriptModule-4.0
MyCustomModule <<<<<<<<<<<<<My Module
__DynamicModule_System.Web.WebPages.WebPageHttpModule, System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35_2d022434-c92d-4088-bfa6-3478c4fc129d

显然,我的模块是在所有内置模块之后注册的,除了 WebPageHttpModule 是在它之后注册的。

这是怎么发生的?我怎么可能确保我自己的模块最后注册?

4

1 回答 1

2

WebPageHttpModule模块是使用RegisterModule方法注册的。使用此方法注册的任何模块都将在配置文件中定义的模块之后注册。Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility

您可以尝试使用此方法注册您自己的模块。但是,无法保证您的模块会最后注册。在大多数情况下,顺序无关紧要。

于 2013-07-08T18:10:16.387 回答