2009-07-20 11 views
6

Ho un problema con il mio HttpModule di autenticazione. Il problema è che ovviamente viene eseguito per ogni singola richiesta che ottengo sul mio server web (IIS7). Poiché utilizza anche la variabile Session, non funziona correttamente su CSS, file JS e simili.Escludere HttpModule dall'esecuzione di contenuto statico su IIS7

Ho cercato di usare:

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

ma senza alcun risultato. Funziona ancora su ogni richiesta indipendentemente dalla sua estensione o tipo mime. Devo anche aggiungere, c'è un'impostazione

<modules runAllManagedModulesForAllRequests="true"> 

che mi sembrava sospetto e in realtà disabilitato preCondizioni su moduli. Ma cambiandola a false, si interrompe l'applicazione in un modo completamente diverso e con un'eccezione diversa (SessionStateTempDataProvider richiede che SessionState sia abilitato).

Qualcuno può aiutarmi a forzare IIS7 a escludere il mio HttpModule quando vengono fatte richieste di file di contenuto statici?

+0

BTW, sei sicuro che si tratta di IIS7 e non di ASP.NET Development Server, giusto? Solo un doppio controllo. –

+0

Sono sicuro al 100% ... –

risposta

3

runAllManagedModulesForAllRequests attributo ha da impostare per falso per configurare in realtà qualsiasi modulo nel modo desiderato. Dovrai anche riconfigurare correttamente Session e altri come necessario, ma la cosa principale è l'ordine di esecuzione della pipeline di gestori che gestisce le richieste.

La risposta è stata fornita in one of my other questions:

Grazie a Peter che ha fornito la risposta che funzionava correttamente.

1

Non conosco l'impostazione IIS7, ma è possibile farlo.

L'oggetto sessione sarà disponibile solo per i contenuti non statico:

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

Questo modo, il codice non verrà eseguito per i file come CSS, JS ecc Ma tenere a mente l'oggetto sessione inoltre, non essere pronto prima dell'evento PostAcquireRequestState. (Per l'ordine degli HttpApplication eventi, vedere this page.)

Edit: Inoltre, sembra con ASP.NET Development Server (anche se so che hai detto IIS7 nella tua domanda), il vostro modulo Http continua a funzionare anche per file statici.

+0

Sì Sto gestendo materiale di sessione in PostAcquireRequestState ... Ma continuo a pensare che sia possibile escludere del tutto il mio modulo ... Devo farlo funzionare con "runAllManagedModulesForAllRequests = false" in qualche modo . Perché questo imposta il mio modulo per funzionare su OGNI richiesta. –

+0

Questo approccio non funziona con le pagine che non utilizzano la sessione. – ygormutti

Problemi correlati