Thread.CurrentPrincipal.Identity.Name пусто от WPF

ИЗМЕНИТЬ

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

END EDIT

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

Thread.CurrentPrincipal.Identity.Name

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

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

Ответ 1

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

EDIT: Я также должен упомянуть методы SetThreadPrincipal и SetPrincipalPolicy на AppDomain. Это должно быть сделано при запуске приложения, и новые созданные потоки теперь будут видеть этот основной принцип по умолчанию. Если этот метод не вызывается, каждый новый поток снова начинается с GenericPrincipal.

Ответ 2

Попробуйте

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

или

Environment.UserName

Ответ 3

Это также помогло мне:

Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());