2009-07-20 18 views
6

Tengo un problema con mi Authentication HttpModule. El problema es que obviamente se ejecuta para cada solicitud que recibo en mi servidor web (IIS7). Debido a que también usa la variable Session, no funciona correctamente en CSS, archivos JS y similares.Excluir que HttpModule se ejecute para contenido estático en IIS7

He intentado utilizar:

<add name="AuthModuleName" type="..." preCondition="managedHandler" /> 

pero fue en vano. Todavía se ejecuta en cada solicitud independientemente de su extensión o tipo de mime. También debería agregar, hay una configuración

<modules runAllManagedModulesForAllRequests="true"> 

que me pareció sospechosa y realmente deshabilitó preConditions en los módulos. Pero al cambiarlo a falso, se rompe la aplicación de una manera completamente diferente y con una excepción diferente (el programa SessionStateTempDataProvider requiere que SessionState esté habilitado).

¿Alguien puede ayudarme a forzar a IIS7 a excluir mi HttpModule cuando las solicitudes se hacen para archivos de contenido estático?

+0

Por cierto, está seguro de que se trata de IIS7 y no de ASP.NET Development Server, ¿verdad? Solo comprobando dos veces. –

+0

Estoy 100% seguro ... –

Respuesta

3

runAllManagedModulesForAllRequests atributo tiene que se fijará a falsa para configurar realidad cualquier módulo de la manera deseada. También deberá reconfigurar correctamente Session y otros según sea necesario, pero lo principal es el orden de ejecución de la línea de controladores que maneja las solicitudes.

La respuesta fue proporcionada en one of my other questions:

Gracias a Peter que proporcionaron la respuesta que ha funcionado correctamente.

1

No conozco una configuración de IIS7 para eso, pero puede hacerlo.

El objeto de sesión estará disponible sólo para el contenido no estático:

void yourEventHandler(object sender, EventArgs e) { 
    HttpApplication app = (HttpApplication)sender; 
    if (app.Context.Session == null) { 
     return; 
    } 
    // then your code here... 
} 

Esto asegurará que su código no se llevará a cabo para los archivos como CSS, JS, etc. Pero hay que tener en cuenta el objeto de sesión se tampoco estará listo antes del evento PostAcquireRequestState. (Para el orden de los eventos HttpApplication, ver this page.)

Editar: Además, parece con ASP.NET servidor de desarrollo (aunque sé que ha dicho en su pregunta IIS7), su HttpModule seguirá funcionando incluso para archivos estáticos.

+0

Sí, estoy manejando cosas de la sesión en PostAcquireRequestState ... Pero todavía creo que es posible excluir mi módulo por completo ... Tengo que hacer que funcione con "runAllManagedModulesForAllRequests = false" de alguna manera . Debido a que este establece mi módulo para ejecutar en CADA solicitud. –

+0

Este enfoque no funciona con páginas que no usan sesión. – ygormutti

Cuestiones relacionadas