获取Windows用户名 - 不同的方法

And*_*ndy 37 .net windows username

在.NET中,似乎有几种方法可以获取当前的Windows用户名.其中三个是:

string name = WindowsIdentity.GetCurrent().Name;
Run Code Online (Sandbox Code Playgroud)

要么

string name = Thread.CurrentPrincipal.Identity.Name;
Run Code Online (Sandbox Code Playgroud)

要么

string name = Environment.UserName;
Run Code Online (Sandbox Code Playgroud)

有什么区别,为什么选择一种方法而不是另一种?还有其他方法吗?

sis*_*sve 32

Environment.UserName在advapi32.dll中调用GetUserName.这意味着如果您冒充其他用户,此属性将反映出来.

Thread.CurrentPrincipal有一个setter,可以通过编程方式进行更改.(这不是假冒btw.)

WindowsIdentity是您当前的Windows身份标识(如果有).它不一定会反映用户,认为ASP.NET使用FormsAuthentication.然后WindowsIdentity将是NT服务,但FormsIdentity将是登录用户.还有PassportIdentity,您可以构建自己的东西以进一步复杂化.