在.NET中,似乎有几种方法可以获取当前的Windows用户名。其中三个是:
string name = WindowsIdentity.GetCurrent().Name;
或
string name = Thread.CurrentPrincipal.Identity.Name;
或
string name = Environment.UserName;
有什么区别,为什么选择一种方法呢? 还有其他方法吗?
答案 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