В чем разница между HttpContext.Current.User и Thread.CurrentPrincipal в asp.net?
Ну, я думаю, что название достаточно ясно.
2 ответа
Самая большая разница в том, что они не должны быть одинаковыми.
Вообще говоря, HttpContext.Current.User
является пользователем входа в систему (когда он вызывается в рабочем потоке), в то время как Thread.CurrentPrincipal
это личность рабочего процесса.
На IIS 5.x, Thread.CurrentPrincipal
по умолчанию ASPNET
, На IIS 6 и выше, Thread.CurrentPrincipal
по умолчанию Network Service
(или идентификатор пула приложений, на который вы меняете).
Чтобы сделать его сложным, если вы включите олицетворение ASP.NET, то оба они могут быть такими же, как и пользователь входа в систему.
Попробуйте прочитать несколько действительно хороших книг на эту тему и статьи Microsoft MSDN,
http://msdn.microsoft.com/en-us/library/ms998351.aspx
Еще одно предложение - использовать отладчик для подключения к рабочему процессу и проверки его во время выполнения. Это может дать вам лучший вид.
Обратите внимание, что
HttpContext.Current.User
это не лучший способ запросить учетную запись пользователя. Вы должны придерживатьсяPage.User
для веб-форм иController.User
для MVC иApiController.User
для веб-API.
Еще одно большое отличие состоит в том, что ваш код не всегда имеет доступ к HttpContext. (Например, если у вас есть все ваши BL в сборке, которая может или не может использоваться из веб-приложения) Хотя эти две учетные записи могут отличаться, если вы используете Thread.CurrentPrincipal, тогда ваш код всегда сможет получить в этом пользовательском объекте, независимо от того, где вы находитесь в вашем коде.