如何获取ASP.NET MVC中的当前用户

在表单模型中,我曾经通过以下方式获取当前login用户:

Page.CurrentUser 

如何获得ASP.NET MVC控制器类中的当前用户?

如果您需要从控制器中获取用户,请使用Controller的“ User属性。 如果你从视图中需要它,我会在ViewData填充你特别需要的东西,或者你可以调用User,因为我认为它是ViewPage的一个属性。

我发现User工作,即User.Identity.NameUser.IsInRole("Administrator")

试试HttpContext.Current.User

公共共享属性Current()作为System.Web.HttpContext
System.Web.HttpContext的成员

概要:
获取或设置当前HTTP请求的System.Web.HttpContext对象。

返回值:
当前HTTP请求的System.Web.HttpContext

你可以像这样在ASP.NET MVC4中获得用户的名字:

 System.Web.HttpContext.Current.User.Identity.Name 

我意识到这是非常古老的,但我刚刚开始使用ASP.NET MVC,所以我想我会坚持我的两分钱:

  • Request.IsAuthenticated告诉你用户是否被authentication。
  • Page.User.Identity为您提供login用户的身份。

我用:

 Membership.GetUser().UserName 

我不知道这将在ASP.NET MVC的工作,但它是值得一击:)

获取login用户名: System.Web.HttpContext.Current.User.Identity.Name

为了引用在控制器中使用内置在ASP.NET MVC 4中的简单身份validation创build的用户ID,用于过滤目的(如果您首先使用数据库,并且entity framework5生成代码优先绑定,并且您的表结构化即使用userID的外键),您可以使用

 WebSecurity.CurrentUserId 

一旦你添加使用语句

 using System.Web.Security; 

使用System.Security.Principal.WindowsIdentity.GetCurrent().Name

这将获得当前login的Windows用户。

用户名与:

 User.Identity.Name 

但是,如果您只需要获取ID,则可以使用:

 using Microsoft.AspNet.Identity; 

所以,你可以直接得到用户名:

 User.Identity.GetUserId(); 

这个网页可能是你要找的东西:
在MVC3中使用Page.User.Identity.Name

你只需要User.Identity.Name

对于它的价值,在ASP.NET MVC 3中,您可以使用User来返回当前请求的用户。

如果你在你的login页面内,例如在LoginUser_LoggedIn事件中,Current.User.Identity.Name将返回一个空值,所以你必须使用你的LoginControlName.UserName属性。

 MembershipUser u = Membership.GetUser(LoginUser.UserName); 
 IPrincipal currentUser = HttpContext.Current.User; bool writeEnable = currentUser.IsInRole("Administrator") || ... currentUser.IsInRole("Operator"); 
 var ticket = FormsAuthentication.Decrypt( HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value); if (ticket.Expired) { throw new InvalidOperationException("Ticket expired."); } IPrincipal user = (System.Security.Principal.IPrincipal) new RolePrincipal(new FormsIdentity(ticket)); 

如果您碰巧在Intranet上的Active Directory中工作,以下是一些提示:

(Windows Server 2012)

在networking服务器上运行任何与AD交谈的内容都需要一些更改和耐心。 由于当运行在Web服务器上而不是本地的IIS / IIS Express上时,它运行在AppPool的身份上,所以你必须设置它来模拟谁击中了这个站点。

当您的ASP.NET MVC应用程序在networking中的Web服务器上运行时,如何将当前login用户置于活动目录中:

 // Find currently logged in user UserPrincipal adUser = null; using (HostingEnvironment.Impersonate()) { var userContext = System.Web.HttpContext.Current.User.Identity; PrincipalContext ctx = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["AllowedDomain"], null, ContextOptions.Negotiate | ContextOptions.SecureSocketLayer); adUser = UserPrincipal.FindByIdentity(ctx, userContext.Name); } //Then work with 'adUser' from here... 

您必须在下面包装任何与“活动目录上下文”相关的调用,以便充当宿主环境来获取AD信息:

 using (HostingEnvironment.Impersonate()){ ... } 

您的web.config中还必须将impersonate设置为true:

 <system.web> <identity impersonate="true" /> 

您必须在web.config中拥有Windows身份validation:

 <authentication mode="Windows" /> 

您可以使用

Request.LogonUserIdentity.Name

在Asp.net Mvc Identity 2中,您可以通过以下方式获取当前用户名:

 var username = System.Web.HttpContext.Current.User.Identity.Name;