2011-03-30 14 views
6

Come si imposta SessionStateAttribute come filtro globale in MVC3? Nel mio Global.asax ho questo nel metodo RegisterGlobalFilters.MVC SessionStateAttribute non funziona come attributo globale

filters.Add(new SessionStateAttribute(SessionStateBehavior.Disabled)); 

E nel mio controller di casa ho questo.

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 

     Session["Blend"] = "Will it blend?"; 

     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 

Ma per qualche motivo mi consente comunque di utilizzare la sessione. Tuttavia, se decoro la classe HomeController con l'attributo, ottengo un errore sulla linea che utilizza la Sessione su un riferimento all'oggetto nullo, che suppongo sia destinato se la Sessione non viene mai creata?

Sto iniziando a chiedermi se c'è qualcosa di sbagliato nel mio progetto. Ho riscontrato piccoli problemi come questo con un comportamento standard che è supposto per funzionare.

Qualcun altro ha avuto problemi con cose come questa?

risposta

11

SessionStateAttribute non è un action filter, quindi non è possibile aggiungerlo come filtro di azione globale. È un attributo speciale che ti permette di decorare i tuoi controller e avere un controllo più preciso sulla modalità di sessione per controller.

Per disattivare la sessione a livello globale per l'intera applicazione mettere il seguente nel web.config:

<sessionState mode="Off" /> 
+5

Wow, questo è una specie di divertente. Sareste sorpresi di quanti siti mi sono imbattuto che usano SessionStateAttribute come esempio di come utilizzare i filtri globali in MVC, immagino che nessuno di loro in realtà testasse i loro esempi prima di pubblicarli su Internet :-P –

Problemi correlati