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());