В чем разница между 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, тогда ваш код всегда сможет получить в этом пользовательском объекте, независимо от того, где вы находитесь в вашем коде.

Другие вопросы по тегам