В чем разница между HttpContext.Current.User и Thread.CurrentPrincipal в asp.net? - PullRequest
10 голосов
/ 04 декабря 2009

Ну, думаю, название достаточно ясное.

Ответы [ 2 ]

12 голосов
/ 04 декабря 2009

Самая большая разница в том, что они не должны быть одинаковыми.

Вообще говоря, 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.

2 голосов
/ 04 декабря 2009

Другое большое отличие состоит в том, что ваш код не всегда имеет доступ к HttpContext. (Например, если у вас есть все ваши BL в сборке, которая может или не может использоваться из веб-приложения) Хотя эти две учетные записи пользователей могут отличаться, если вы используете Thread.CurrentPrincipal, тогда ваш код всегда сможет получить в этом пользовательском объекте, независимо от того, где вы находитесь в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...