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

时间:2009-04-24 11:04:01

标签: asp.net-mvc

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

在控制器中我试图获取当前登录用户,为此似乎有两种方法:

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

或者

HttpContext.User.Identity.Name

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

2 个答案:

答案 0 :(得分:88)

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

答案 1 :(得分:24)

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