2009-04-24 185 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相同的數據。

相關問題