如何获取访问ASP.NET应用程序的当前用户?

要获取系统中当前登录的用户,我使用以下代码:

string opl = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString(); 

我在一个ASP.NET应用程序上工作,我需要这些信息。 所以我把我的应用程序放在服务器上并尝试上面的代码,然后在字符串opl中得到“网络服务”。 我需要知道访问我的ASP.NET应用程序的PC的当前用户。

如果您正在使用会员资格,您可以这样做: Membership.GetUser()

您的代码将返回分配有ASP.NET的Windows帐户。

快速回答是User = System.Web.HttpContext.Current.User

确保您的web.config具有以下身份validation元素。

         

进一步阅读 : 配方:在Intranet ASP.NET Web应用程序中启用Windows身份validation

使用System.Web.HttpContext.Current.User.Identity.Name应该可以工作。 请执行以下操作,检查托管您站点的服务器上的IIS站点设置:

  1. 转到IIS→ 站点 →您的站点→ 身份validation

    IIS设置

  2. 现在检查匿名访问是否已禁用, Windows身份validation是否已启用。

    认证

  3. 现在System.Web.HttpContext.Current.User.Identity.Name应该返回如下内容:

    domain \ username

最佳做法是首先检查Identity.IsAuthenticated属性,然后像这样获取usr.UserName

 string userName = string.Empty; if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.User.Identity.IsAuthenticated) { System.Web.Security.MembershipUser usr = Membership.GetUser(); if (usr != null) { userName = usr.UserName; } } 

您只需使用页面的属性即可。 有趣的是,您可以在代码中的任何位置访问该属性。

用这个:

 HttpContext.Current.User.Identity.Name 

不要看得太远。

如果使用ASP.NET MVC进行开发,则只需将用户作为Controller类的属性即可 。 因此,如果您在某些寻找当前用户的模型中迷路,请尝试后退并在控制器中获取相关信息。

在控制器中,只需使用:

 using Microsoft.AspNet.Identity; ... var userId = User.Identity.GetUserId(); ... 

userId作为字符串。

上面的一般共识答案似乎与CORS支持存在兼容性问题。 要使用HttpContext.Current.User.Identity.Name属性,必须禁用匿名身份validation,以强制Windows身份validation提供经过身份validation的用户信息。 不幸的是,我认为您必须启用匿名身份validation才能在CORS方案中处理飞行前OPTIONS请求。

您可以通过启用匿名身份validation并使用HttpContext.Current.Request.LogonUserIdentity属性来解决此问题。 即使启用了匿名身份validation,这也将返回经过身份validation的用户信息(假设您处于Intranet方案中)。 该属性返回WindowsUser数据结构,两者都在System.Web命名空间中定义

  using System.Web; WindowsIdentity user; user = HttpContext.Current.Request.LogonUserIdentity;