2009-04-24 1 views
68

Я работаю над приложением MVC ASP .NET. Я относительно новичок.Разница между HttpContext.Current и Controller.Context в MVC ASP.NET

В контроллере я стараюсь, чтобы получить текущий журнал на пользователя, для которого, как представляется, два способа сделать это:

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

Или

HttpContext.User.Identity.Name 

В чем разница между эти? Насколько я могу сказать в рамках MVC, контроллер имеет текущий HttpContext, хранящийся как свойство, поэтому эти методы идентичны. Это верно?

ответ

82

Да, они обычно будут идентичны. Однако, если вы работаете с дополнительными потоками, их не будет; System.Web.HttpContext.Current - это резьба.

+33

Просто поясните отличный ответ: ThreadStatic означает, что значение привязано к потоку. То есть, в любом дополнительном потоке вы не можете получить доступ к HttpContext.Current. –

+4

Кроме того, не забывайте, что на контроллере есть ControllerContext, который включает в себя специфическую информацию MVC, такую ​​как коллекция RouteData. –

+5

Идти глубже в HttpContext и потокование http://odetocode.com/articles/112.aspx – River

23

Контекст, предоставляемый контроллером (не статическим HttpContext.Current), является макетным. Если вам интереснее тестировать ваш код, гораздо проще создать макет ControllerContext и установить его на контроллере, чем пройти через HttpContext.Current. В противном случае ControllerContext.HttpContext указывает на те же данные, что и HttpContext.Current.

+0

Очень важный момент! –

Смежные вопросы