我想写一个IHttpModule,必须在FormsAuthenticationModule之后严格执行,否则将无用.
有HttpContext.Current.ApplicationInstance.Modules属性返回IHttpModules的集合.我可以检查我的模块是否在此集合中的FormsAuthenticationModule之后.
那会不够用?该集合是否按照执行顺序排列IHttpModules?
解决方法
回想一下,模块可以订阅不同的流水线事件.在任何给定的管道事件中,模块应按照模块集合中指定的顺序运行.
作为一个实际的例子,想像一个模块集合,其中注册了这三个模块:
>模块A,它订阅EndRequest
>模块B,它订阅了BeginRequest和EndRequest
>模块C,它订阅AuthenticateRequest
执行顺序为:
>模块B,BeginRequest
> Module C,AuthenticateRequest
>模块A,EndRequest
模块B,EndRequest
由于FormsAuthenticationModule订阅AuthenticateRequest事件,因此考虑使您自己的模块订阅PostAuthenticateRequest事件.这样,您可以保证,如果FormsAuthenticationModule逻辑运行,它将运行在您的逻辑之前,无论他们在Modules集合中注册的顺序如何.