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

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

在一个控制器中,我试图获取当前用户的日志,对此,似乎有两种方法来做到这一点:

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

要么

 HttpContext.User.Identity.Name 

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

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

控制器提供的上下文(而不是静态的HttpContext.Current)是可嘲弄的。 如果你对unit testing你的代码感兴趣,创build一个模拟ControllerContext并在Controller上设置它比通过HttpContext.Current更容易。 否则,ControllerContext.HttpContext指向与HttpContext.Current相同的数据。