我想写一个必须在IHttpModule
之后严格执行的FormsAuthenticationModule
,否则它将毫无用处。
有HttpContext.Current.ApplicationInstance.Modules
属性可返回IHttpModule
的集合。我可以检查我的模块是否在此集合中FormsAuthenticationModule
之后。
这还够吗?该集合是否按照执行顺序列出IHttpModule
?
答案 0 :(得分:14)
回想一下,模块可以订阅不同的管道事件。在任何给定的管道事件中,模块应按照在Modules集合中指定的顺序运行。
作为一个实际的例子,想象一下模块集合,它注册了这三个模块:
执行顺序为:
由于FormsAuthenticationModule订阅了AuthenticateRequest事件,因此请考虑让您自己的模块订阅PostAuthenticateRequest事件。这样,您可以保证,如果FormsAuthenticationModule逻辑运行,它将在您的逻辑之前运行,而不管它们在Modules集合中的注册顺序。
答案 1 :(得分:2)
我会尽力回答。
我认为你不应该依赖于HttpContext.Current.ApplicationInstance.Modules集合,因为你现在在执行哪个命令模块。
请注意,我没有做任何原型,这只是我的想法。
dll Microsoft.Web.Infrastructure.dll有一个动态注册HTTP模块的方法
dll随WebPages 1.0一起提供
创建注册的辅助类
public static class RegisterHttpModuleHelper
{
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(YourCustomModule));
}
}
FormsAuthenticationModule具有“Authenticate”事件。
在处理此事件时,尝试使用
动态注册您的Custom HttpModulepublic void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args)
{
RegisterHttpModuleHelper.Start()
}