2009-04-24 191 views
68

我正在开发一个MVC ASP .NET应用程序。我对两者都比较陌生。MVC中的HttpContext.Current和Controller.Context之间的区别ASP.NET

在控制器我试图获取当前登录的用户,对此似乎有这样做的方法有两种:

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

或者

HttpContext.User.Identity.Name 

之间有什么区别这些?据我可以告诉MVC框架内的控制器有当前HttpContext存储为一个属性,所以这些方法是相同的。那是对的吗?

回答

82

是的,他们通常会是相同的。但是,如果你正在使用额外的线程,他们将不会; System.Web.HttpContext.Current是线程的。

+33

只是为了澄清,否则你的出色答卷:ThreadStatic意味着价值是联系在一起的线索。也就是说,在任何其他线程中,您无法访问HttpContext.Current。 – 2009-04-24 11:42:28

+4

另外,不要忘记,有一个ControllerContext,以及包括像的RouteData集合MVC的具体信息在控制器上。 – 2009-04-24 12:03:21

23

由控制器所提供的上下文(未静态HttpContext.Current)是mockable。如果你有兴趣在单元测试你的代码,它通常更容易创建一个模拟ControllerContext并设置它的控制器比它要经过HttpContext.Current。否则,ControllerContext.HttpContext指向与HttpContext.Current相同的数据。

相关问题