2012-11-25 12 views
7

Ho bisogno di controllare alcune cose (cookie) per ogni richiesta che arriva alla mia applicazione.MVC 3/4 HttpModule o ActionFilter

In ASP.NET abbiamo usato HttpModule per questa attività, la domanda che cosa dovrebbe essere usato in MVC? Alcuni filtri globali, o posso usare anche HttpModuler, c'è qualche differenza tra la PipeLine richiesta tra MVC e ASP.NET regolare?

risposta

11

MVC è un'astrazione su ASP.NET e quindi i loro "hook" dipendono realmente dal livello in cui si desidera iniettare la logica. Un filtro azione consente di collegarsi agli eventi specifici MVC:

  • OnActionExecuting - Questo metodo viene chiamato prima che venga eseguita un'azione del controllore.
  • OnActionExecuted - Questo metodo viene chiamato dopo l'esecuzione di un'azione del controllore.
  • OnResultExecuting - Questo metodo viene chiamato prima dell'esecuzione di un risultato dell'azione del controllore.
  • OnResultExecuted - Questo metodo viene chiamato dopo l'esecuzione di un risultato dell'azione del controllore.

considerando che un HttpModule consente solo di collegare in ASP.NET (su cui è costruito MVC) eventi specifici:

  • BeginRequest - Richiesta è stato avviato. Se devi fare qualcosa all'inizio di una richiesta (ad esempio, visualizza i banner pubblicitari nella parte superiore di ogni pagina), sincronizza questo evento.
  • AuthenticateRequest - Se si desidera collegare lo schema di autenticazione personalizzato (ad esempio, cercare un utente in un database per convalidare la password), creare un modulo che sincronizzi questo evento e autentica l'utente nel modo desiderato a.
  • AuthorizeRequest - Questo evento viene utilizzato internamente per implementare i meccanismi di autorizzazione (ad esempio, per memorizzare gli elenchi di controllo di accesso (ACL) in un database anziché nel file system). Sebbene tu possa ignorare questo evento, non ci sono molti buoni motivi per farlo.
  • PreRequestHandlerExecute - Questo evento si verifica prima che venga eseguito il gestore HTTP.
  • PostRequestHandlerExecute - Questo evento si verifica dopo l'esecuzione del gestore HTTP.
  • EndRequest - La richiesta è stata completata. È possibile che si desideri creare un modulo di debug che raccolga le informazioni in tutta la richiesta e quindi scriva le informazioni nella pagina.

Quindi dipende davvero da quando è necessario collegare l'evento e quali eventi sono necessari.

3

Se HttpModule ha funzionato bene prima, continuerà con Mvc.

Le altre parti della tua domanda sono abbastanza ampie e pensate che stareste anche leggendo un buon articolo su asp.net-mvc pipeline and extensibilit y.

+0

Ottimo articolo lì – Ronnie

2

Ho fatto cose simili usando un filtro di azione globale. Funziona abbastanza bene e mantiene il codice integrato nella tua applicazione.

Un modulo HTTP funziona anche, ovviamente, ma ciò significa separare il codice dall'applicazione principale e mantenerlo separatamente.A meno che il tuo codice non si estenda su più siti o sia utilizzato in più applicazioni o debba funzionare con siti di moduli Web, allora utilizzerei un filtro globale.