我想写一个IHttpModule
必须严格执行的FormsAuthenticationModule
,否则就没用了。
有HttpContext.Current.ApplicationInstance.Modules
返回 s 集合的属性IHttpModule
。我可以检查我的模块是否FormsAuthenticationModule
在此集合中。
这样就够了吗?该集合列表是否IHttpModule
按照它们的执行顺序排列?
我想写一个IHttpModule
必须严格执行的FormsAuthenticationModule
,否则就没用了。
有HttpContext.Current.ApplicationInstance.Modules
返回 s 集合的属性IHttpModule
。我可以检查我的模块是否FormsAuthenticationModule
在此集合中。
这样就够了吗?该集合列表是否IHttpModule
按照它们的执行顺序排列?
回想一下,模块可以订阅不同的管道事件。在任何给定的管道事件中,模块应该按照它们在 Modules 集合中指定的顺序运行。
作为一个实际示例,想象一个 Modules 集合,其中注册了这三个模块:
执行顺序将是:
由于 FormsAuthenticationModule 订阅了 AuthenticateRequest 事件,请考虑让您自己的模块订阅 PostAuthenticateRequest 事件。这样,您就可以保证如果 FormsAuthenticationModule 逻辑运行,它会在您的 logic 之前运行,而不管它们在 Modules 集合中注册的顺序如何。
我会尽量回答。
我认为您不应该依赖 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 具有事件“身份验证”。
在此事件的处理者中,尝试使用动态注册您的自定义 HttpModule
public void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args)
{
RegisterHttpModuleHelper.Start()
}