2009-04-24 12 views
68

Estoy trabajando en una aplicación MVC ASP .NET. Soy relativamente nuevo para ambos.Diferencia entre HttpContext.Current y Controller.Context en MVC ASP.NET

En un controlador estoy tratando de obtener el registro actual de usuario, por lo que parece que hay dos maneras de hacer esto:

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

O

HttpContext.User.Identity.Name 

¿Cuál es la diferencia entre ¿estas? Por lo que puedo decir dentro del marco de MVC, el controlador tiene el HttpContext actual almacenado como una propiedad, por lo que estos métodos son idénticos. ¿Es eso correcto?

Respuesta

82

Sí, generalmente serán idénticos. Sin embargo, si está trabajando con hilos adicionales, no lo serán; System.Web.HttpContext.Current es threadstatic.

+33

Solo para aclarar su excelente respuesta: ThreadStatic significa que el valor está vinculado al hilo. Es decir, en cualquier conversación adicional, no puede acceder a HttpContext.Current. –

+4

Además, no olvide que también hay un ControllerContext en el controlador que incluye información específica de MVC como la colección RouteData. –

+5

Profundizando en HttpContext y subprocesamiento http://odetocode.com/articles/112.aspx – River

23

El contexto provisto por el controlador (no el HttpContext.Current estático) es simulable. Si está interesado en probar su código unitario, generalmente es mucho más fácil crear un ControllerContext simulado y configurarlo en el Controlador que pasar por HttpContext.Current. De lo contrario, ControllerContext.HttpContext apunta a los mismos datos que HttpContext.Current.

+0

¡Punto muy importante! –

Cuestiones relacionadas