如何在ASP中获取当前用户。NET MVC

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

Page.CurrentUser

如何在ASP中获得控制器类中的当前用户。净MVC吗?

400243 次浏览

我使用:

Membership.GetUser().UserName

我不确定这是否适用于ASP。NET MVC,但它值得一试:)

HttpContext.Current.User试试。

公共共享属性Current() As System.Web.HttpContext < br >

. httpcontext的成员 < p >简介:< br > 获取或设置当前HTTP请求的System.Web.HttpContext对象。< / p > < p >返回值:< br > 当前的System.Web.HttpContext HTTP请求< / p >

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

我知道这真的很旧,但我刚刚开始使用ASP。NET MVC,所以我想我要坚持我的两分:

  • Request.IsAuthenticated告诉你用户是否被验证。
  • Page.User.Identity提供了登录用户的标识。

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

正在登录用户名:System.Web.HttpContext.Current.User.Identity.Name

IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
...
currentUser.IsInRole("Operator");

不管怎样,在ASP中。NET MVC 3你可以使用User来返回当前请求的用户。

如果你在登录页面中,以LoginUser_LoggedIn事件为例,Current.User.Identity.Name将返回一个空值,所以你必须使用yourLoginControlName。用户名属性。

MembershipUser u = Membership.GetUser(LoginUser.UserName);

这个页面可能就是你要找的:
在MVC3中使用Page.User.Identity.Name < / p >

你只需要User.Identity.Name

为了引用使用ASP中内置的简单身份验证创建的用户ID。如果你使用数据库优先和实体框架5来生成代码优先绑定,并且你的表是结构化的,因此使用userID的外键,这是很有帮助的),你可以使用

WebSecurity.CurrentUserId

一旦你添加了using语句

using System.Web.Security;

您可以在ASP中获取用户名。NET MVC4:

System.Web.HttpContext.Current.User.Identity.Name
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));

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

这将获取当前登录的Windows用户。

如果你碰巧在内部网的Active Directory中工作,这里有一些提示:

(Windows Server 2012)

在web服务器上运行任何与AD对话的程序都需要大量的更改和耐心。因为当运行在web服务器上而不是本地IIS/IIS Express时,它运行在AppPool的身份中,所以你必须设置它来模拟任何访问站点的人。

如何在活动目录中获取当前登录的用户。NET MVC应用程序运行在网络内的web服务器上:

// 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...

你必须在下面包装任何与'active directory context'有关的调用,这样它就充当了宿主环境来获取AD信息:

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

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

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

在web.config中必须开启Windows身份验证:

<authentication mode="Windows" />

用户名:

User.Identity.Name

但如果你只需要获取ID,你可以使用:

using Microsoft.AspNet.Identity;

所以,你可以直接获得用户ID:

User.Identity.GetUserId();

你可以使用以下代码:

Request.LogonUserIdentity.Name;

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

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

我们可以使用下面的代码在ASP中获取当前登录的用户。Net MVC:

var user= System.Web.HttpContext.Current.User.Identity.GetUserName();

var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'


Environment.UserName - Will Display format : 'Username'

在IIS管理器中,在身份验证下,禁用: 1)匿名认证 2)表单认证

然后添加以下到你的控制器,以处理测试和服务器部署:

string sUserName = null;
string url = Request.Url.ToString();


if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;

如果有人还在读这篇文章,我用下面的方式访问cshtml文件。

<li>Hello @User.Identity.Name</li>