MVC ASP.NET中HttpContext.Current和Controller.Context之间的区别


72

我正在开发MVC ASP .NET应用程序。我对这两个都比较陌生。

在控制器中,我尝试获取当前的登录用户,似乎有两种方法可以执行此操作:

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

要么

HttpContext.User.Identity.Name

这些有什么区别?据我所知,在MVC框架中,控制器将当前的HttpContext存储为属性,因此这些方法是相同的。那是对的吗?

Answers:


91

是的,它们通常是相同的。但是,如果您正在使用其他线程,则不会。System.Web.HttpContext.Current是线程静态的。


38
只是为了阐明您的其他出色答案:ThreadStatic表示该值与线程相关。也就是说,在任何其他线程中,您都无法访问HttpContext.Current。
Tamas Czinege 09年

6
同样,不要忘记在控制器上还有一个ControllerContext,它包括MVC特定信息,例如RouteData集合。
James Avery

25

控制器提供的上下文(不是静态HttpContext.Current)是可模拟的。如果您对代码进行单元测试感兴趣,通常比在HttpContext.Current中创建模拟ControllerContext并在Controller上进行设置要容易得多。否则,ControllerContext.HttpContext指向与HttpContext.Current相同的数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.