none
自定义的HttpModules是否有顺序? RRS feed

  • 问题

  • ASP.NET管道中原有的模块是有顺序的,比如下面这几个:

  • 引发 BeginRequest 事件。

  • 引发 AuthenticateRequest 事件。

  • 引发 PostAuthenticateRequest 事件。

  • 引发 AuthorizeRequest 事件。

  • 引发 PostAuthorizeRequest 事件。

  • 引发 ResolveRequestCache 事件。

  • 引发 PostResolveRequestCache 事件。

     

    我有个问题.  对于我们自己注册的模块,比如:

      <modules>
          <add type="URLRewriter.ModuleRewriter,URLRewriter" name="ModuleRewriter1" />

          <add type="URLRewriter.ModuleRewriter,URLRewriter" name="ModuleRewriter2" />
      </modules>

     

    1和2是否有顺序呢? 在msdn中没有找到相关的说明.

     

    高手们请指点一下.谢谢!

  • 2009年1月14日 6:29

    答案

    • 不好意思.提出这个问题的时候我居然死磕MSDN忘记Google了.

      下面是答案:

       

      HttpModule执行的顺序取决于web.config配置HttpModule的顺序,而HttpModule中事件的执行先后顺序与asp.net运行机制相关,具体执行顺序如下:

      BeginRequest
      AuthenticateRequest
      AuthorizeRequest
      ResolveRequestCache
      AcquireRequestState
      PreRequestHandlerExecute
      PostRequestHandlerExecute
      ReleaseRequestState
      UpdateRequestCache
      EndRequest


      此外,有三个不确定的顺序:
      PreSendRequestHeaders
      PreSendRequestContent
      Error

      举个例子:
      如果你在web.config配置了两个HttpModule,分别是HttpModuleA,HttpModuleB

      这个事件执行的顺序如下:
      HttpModuleA->BeginRequest
      HttpModuleB->BeginRequest
      HttpModuleA->AuthenticateRequest
      HttpModuleB->AuthenticateRequest
      HttpModuleA->AuthorizeRequest
      HttpModuleB->AuthorizeRequest
      ...以此类推  

       

      2009年1月15日 6:33