如何获取ASP.NET MVC中的当前用户
在表单模型中,我曾经通过以下方式获取当前login用户:
Page.CurrentUser
如何获得ASP.NET MVC控制器类中的当前用户?
如果您需要从控制器中获取用户,请使用Controller的“ User
属性。 如果你从视图中需要它,我会在ViewData
填充你特别需要的东西,或者你可以调用User,因为我认为它是ViewPage
的一个属性。
我发现User
工作,即User.Identity.Name
或User.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;
- MultipleActiveResultSets =真或多个连接?
- Thread.Start()与ThreadPool.QueueUserWorkItem()
- Stream.Dispose是否总是调用Stream.Close(和Stream.Flush)
- EscapeUriString和EscapeDataString有什么区别?
- 检查Windowspath中是否存在可执行文件
- .NET中的IEqualityComparer <T>中GetHashCode的作用是什么?
- 如何通过LINQ压扁树?
- 因为它有一个DefiningQuery,并且<ModificationFunctionMapping>元素中不存在<InsertFunction>元素
- 无法将目标平台更改为“任何CPU”