Thread.CurrentPrincipal.Identity.Name пуст от WPF - PullRequest
14 голосов
/ 15 июля 2011

EDIT

Простой вопрос: как я могу получить Thread.CurrentPrincipal.Identity.Name для входа текущего пользователя в WPF?

КОНЕЦ РЕДАКТИРОВАНИЯ

Я пытаюсь вызвать существующий метод (не в какой-либо службе; просто метод в POCO), который получает текущего пользователя с помощью:

Thread.CurrentPrincipal.Identity.Name

Этот код был написан кем-то другим и (предположительно) работает с его проектом ASP.NET MVC. Я пытаюсь вызвать этот же метод из WPF, и имя теперь пустое.

Что я могу с этим поделать?

Ответы [ 3 ]

19 голосов
/ 15 июля 2011

Установите Thread.CurrentPrincipal в new WindowsPrincipal(WindowsIdentity.GetCurrent()). После этого у вас будет надежный текущий участник на весь срок службы этого потока. Вам придется повторить это на любых других нитях, которые вы раскручиваете.

РЕДАКТИРОВАТЬ: я должен также упомянуть методы SetThreadPrincipal и SetPrincipalPolicy в AppDomain. Это должно быть сделано при запуске приложения, и новые созданные потоки теперь будут видеть этот принципал по умолчанию. Если этот метод не вызывается, каждый новый поток снова запускается с GenericPrincipal.

6 голосов
/ 15 июля 2011

Попробуйте

System.Security.Principal.WindowsIdentity.GetCurrent().Name;

или:

Environment.UserName
1 голос
/ 02 марта 2017

Это также сработало для меня:

Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...