我可以确定HttpModules是按照它们在HttpApplication.Modules集合中列出的顺序执行的吗?

sha*_*oth 11 .net asp.net iis httpmodule

我想写一个IHttpModule必须严格执行的FormsAuthenticationModule,否则它将是无用的.

HttpContext.Current.ApplicationInstance.Modules属性返回IHttpModules 的集合.我可以检查我的模块是否FormsAuthenticationModule在此集合中.

这还够吗?该集合是否IHttpModule按照执行顺序列出?

Lev*_*evi 14

回想一下,模块可以订阅不同的管道事件.在任何给定的管道事件中,模块应按照在Modules集合中指定的顺序运行.

作为一个实际的例子,想象一下模块集合,其中注册了以下三个模块:

  • 模块A,订阅EndRequest
  • 模块B,订阅BeginRequest和EndRequest
  • 模块C,订阅AuthenticateRequest

执行顺序如下:

  1. 模块B,BeginRequest
  2. 模块C,AuthenticateRequest
  3. 模块A,EndRequest
  4. 模块B,EndRequest

由于FormsAuthenticationModule订阅了AuthenticateRequest事件,因此请考虑让您自己的模块订阅PostAuthenticateRequest事件.这样,您可以保证,如果FormsAuthenticationModule逻辑运行,它将在您的逻辑之前运行,而不管它们在Modules集合中注册的顺序如何.