Adam Rackis
Adam Rackis

Reputation: 83366

Thread.CurrentPrincipal.Identity.Name is empty from WPF

EDIT

The simple question is, how can I get Thread.CurrentPrincipal.Identity.Name to have the current user logon in WPF?

END EDIT

I'm trying to call an existing method (not in any sort of service; just a method in a POCO) that retrieves the current user with:

Thread.CurrentPrincipal.Identity.Name

This code was written by someone else, and (presumably) works with his ASP.NET MVC project. I'm trying to call this same method from WPF, and Name is now blank.

Is there anything I can do about this?

Upvotes: 14

Views: 14143

Answers (3)

Little Bobbie2
Little Bobbie2

Reputation: 101

This also worked for me:

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

Upvotes: 1

Andy
Andy

Reputation: 8562

Set Thread.CurrentPrincipal to new WindowsPrincipal(WindowsIdentity.GetCurrent()). You'll then reliably have the current principal for the lifetime of that thread. You'll have to repeat this on any other threads you spin up.

EDIT: I should also mention the SetThreadPrincipal and SetPrincipalPolicy methods on AppDomain. This should be done on application startup, and new threads created will now see this principal by default. If this method isn't called, every new thread will start out with GenericPrincipal again.

Upvotes: 20

Mrchief
Mrchief

Reputation: 76238

Try

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

or:

Environment.UserName

Upvotes: 6

Related Questions