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

时间:2010-07-04 14:43:23

标签: .net windows username

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

string name = WindowsIdentity.GetCurrent().Name;

string name = Thread.CurrentPrincipal.Identity.Name;

string name = Environment.UserName;

有什么区别,为什么选择一种方法呢? 还有其他方法吗?

4 个答案:

答案 0 :(得分:31)

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

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

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

答案 1 :(得分:1)

你问过其他方法。

当然,您始终可以使用本机Windows API:GetUserName

答案 2 :(得分:0)

我相信该物业被放置在几个地方,以便程序员更容易找到。只有一个登录用户,只有一个相应的名称。

答案 3 :(得分:0)

这三种方法描述如下:

HttpContext = HttpContext.Current.User,它返回一个IPrincipal对象,其中包含当前Web请求的安全信息。这是经过身份验证的Web客户端。

WindowsIdentity = WindowsIdentity.GetCurrent(),它返回当前正在执行的Win32线程的安全上下文的标识。

Thread = Thread.CurrentPrincipal,它返回当前正在执行的.NET线程的主体,该线程位于Win32线程之上。

它们会根据您的IIS配置更改结果,如本文所述: http://msdn.microsoft.com/en-us/library/aa302377.aspx