2009-04-24 11 views
68

Sto lavorando su un'applicazione MVC ASP .NET. Sono relativamente nuovo ad entrambi.Differenza tra HttpContext.Current e Controller.Context in MVC ASP.NET

In un controller sto cercando di ottenere il registro corrente su utenti, per i quali non sembrano essere due modi per farlo:

System.Web.HttpContext.Current.User.Identity.Name 

O

HttpContext.User.Identity.Name 

Qual è la differenza tra queste? Per quanto posso dire all'interno del framework MVC, il controller ha l'attuale HttpContext memorizzato come proprietà, quindi questi metodi sono identici. È corretto?

risposta

82

Sì, di solito sono identici. Tuttavia, se stai lavorando con thread aggiuntivi, non lo saranno; System.Web.HttpContext.Current è threadstatic.

+33

Giusto per chiarire la tua risposta altrimenti eccellente: ThreadStatic indica che il valore è legato alla discussione. Cioè, in qualsiasi thread aggiuntivo, non puoi accedere a HttpContext.Current. –

+4

Inoltre, non dimenticare che è presente anche ControllerContext sul controller che include informazioni specifiche MVC come la raccolta RouteData. –

+5

Andando più in profondità in HttpContext e threading http://odetocode.com/articles/112.aspx – River

23

Il contesto fornito dal controller (non HttpContext.Current statico) è mockable. Se sei interessato a testare l'unità del tuo codice, è generalmente molto più facile creare un controller Controller fittizio e impostarlo sul controller piuttosto che passare attraverso HttpContext.Current. Altrimenti ControllerContext.HttpContext punta agli stessi dati di HttpContext.Current.

+0

Punto molto importante! –

Problemi correlati