asp.net .net iis httpmodule

asp.net - ¿Puedo estar seguro de que los HttpModules se ejecutan en el orden en que se enumeran en la colección HttpApplication.Modules?



iis (2)

Intentaré responderlo.

No creo que deba confiar en la colección HttpContext.Current.ApplicationInstance.Modules, porque lo hace ahora en qué módulo de orden se ejecutará.

Tenga en cuenta que no hice ningún prototipo, es solo mi pensamiento.

El dll Microsoft.Web.Infrastructure.dll tiene un método para registrar dinámicamente el módulo HTTP

El dll se envía con WebPages 1.0

Crear clase de ayuda para el registro

public static class RegisterHttpModuleHelper { public static void Start() { DynamicModuleUtility.RegisterModule(typeof(YourCustomModule)); } }

FormsAuthenticationModule tiene el evento "Autenticar".

En la mano de este evento, intente registrar dinámicamente su HttpModule personalizado usando

public void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args) { RegisterHttpModuleHelper.Start() }

Quiero escribir un IHttpModule que debe ejecutarse estrictamente después de FormsAuthenticationModule ; de lo contrario, será inútil.

Existe la propiedad HttpContext.Current.ApplicationInstance.Modules que devuelve una colección de IHttpModule s. Puedo verificar que mi módulo esté después de FormsAuthenticationModule en esta colección.

¿Será eso suficiente? ¿ IHttpModule colección incluye IHttpModule s en el orden en que se ejecutan?


Recuerde que los módulos pueden suscribirse a diferentes eventos de canalización. Dentro de cualquier evento de canalización, los módulos deben ejecutarse en el orden en que se especifican en la colección Módulos.

Como ejemplo práctico, imagine una colección de Módulos que tenga registrados estos tres módulos:

  • Módulo A, que se suscribe a EndRequest
  • Módulo B, que se suscribe a BeginRequest y EndRequest
  • Módulo C, que se suscribe a AuthenticateRequest

El orden de ejecución será:

  1. Módulo B, BeginRequest
  2. Módulo C, AuthenticateRequest
  3. Módulo A, EndRequest
  4. Módulo B, EndRequest

Dado que FormsAuthenticationModule se suscribe al evento AuthenticateRequest, considere hacer que su propio módulo se suscriba al evento PostAuthenticateRequest. De esta manera, se garantiza que, si se ejecuta la lógica FormsAuthenticationModule, se ejecuta antes de su lógica , independientemente del orden en el que están registrados en la colección de Módulos.