Thread.CurrentPrincipal.Identity.Name从WPF为空

编辑

简单的问题是,如何让Thread.CurrentPrincipal.Identity.Name在WPF中拥有当前用户登录?

结束编辑

我正在尝试调用现有方法(不是在任何类型的服务中;只是POCO中的方法),它使用以下方法检索当前用户:

Thread.CurrentPrincipal.Identity.Name

这段代码是由其他人编写的,并且(可能)与他的ASP.NET MVC项目一起工作。 我试图从WPF调用相同的方法,而Name现在是空白的。

我能做些什么吗?

Thread.CurrentPrincipal设置为new WindowsPrincipal(WindowsIdentity.GetCurrent()) 。 然后,您将可靠地获得该线程生命周期的当前主体。 您必须在您启动的任何其他线程上重复此操作。

编辑:我还应该提到AppDomain上的SetThreadPrincipal和SetPrincipalPolicy方法。 这应该在应用程序启动时完成,创建的新线程现在默认会看到此主体。 如果未调用此方法,则每个新线程将再次使用GenericPrincipal。

尝试

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

要么:

 Environment.UserName 

这也对我有用:

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