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

Ser*_*gel 263 .net c# iis asp.net-mvc forms-authentication

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

Page.CurrentUser
Run Code Online (Sandbox Code Playgroud)

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

Haa*_*ked 260

如果需要从控制器中获取用户,请使用UserController 的属性.如果您从视图中需要它,我会填充您特别需要的内容ViewData,或者您可以只调用User,因为我认为它是属性ViewPage.

  • 是的,您可以使用它,"嗨,@ User.Identity.Name!" 在cshtml中. (16认同)
  • "或者你可以调用User,因为我认为它是ViewPage的属性" - 所以你的意思是当你在视图中时使用Page.user? (2认同)

小智 192

我发现User有效,即User.Identity.NameUser.IsInRole("Administrator").

  • 只是为了补充一点,如果你在一个表单之外的类中工作,你需要`Imports System.Web`并进一步使用`HttpContext.Current.User.Identity.Name`进行限定,或者直接符合条件使用完整语法:`System.Web.HttpContext.Current.User.Identity.Name` (19认同)

dov*_*ove 57

试试HttpContext.Current.User.

Public Shared Property Current()As System.Web.HttpContext System.Web.HttpContext的
成员

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

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

  • 我相信你们两个正在谈论两件不同的事情.System.Web.HttpContext和静态属性:System.Web.Mvc.Controller.HttpContext(其中没有"Current"属性. (20认同)
  • 显然,HttpContext没有名为"Current"的属性. (2认同)

rad*_*byx 38

您可以在ASP.NET MVC4中获取用户的名称,如下所示:

System.Web.HttpContext.Current.User.Identity.Name
Run Code Online (Sandbox Code Playgroud)

  • 如果你得到这个错误``System.Web.HttpContextBase'不包含'Current'的定义,并且没有扩展方法'Current'接受类型'System.Web.HttpContextBase'的第一个参数'可以找到`,我会建议像这样进行绝对调用,`System.Web.HttpContext.Current.User.Identity.Name`. (4认同)

小智 20

我意识到这已经很老了,但我刚刚开始使用ASP.NET MVC,所以我想我会坚持下去:

  • Request.IsAuthenticated 告诉您用户是否经过身份验证.
  • Page.User.Identity 为您提供登录用户的身份.


Sea*_*ean 16

我用:

Membership.GetUser().UserName
Run Code Online (Sandbox Code Playgroud)

我不确定这会在ASP.NET MVC中有效,但是值得一试:)

  • 这实际上会产生数据库请求.HttpContext.Current.User没有. (2认同)

小智 11

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


小智 9

为了在过滤目的中引用在ASP.NET MVC 4中内置的简单身份验证创建的用户ID(如果您首先使用数据库而实体框架5生成代码优先绑定并且您的表的结构是如此你可以使用那个用户ID的外键)

WebSecurity.CurrentUserId
Run Code Online (Sandbox Code Playgroud)

一旦添加了using语句

using System.Web.Security;
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这似乎不再适用于MVC 5.不确定为什么= / (4认同)
  • 只有`System.Security.Principal.WindowsIdentity.GetCurrent().Name`在`MVC 5`中起作用.但是,这会使用用户名提取域名.即域\用户名 (2认同)

小智 7

用户名:

User.Identity.Name
Run Code Online (Sandbox Code Playgroud)

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

using Microsoft.AspNet.Identity;
Run Code Online (Sandbox Code Playgroud)

因此,您可以直接获得用户ID:

User.Identity.GetUserId();
Run Code Online (Sandbox Code Playgroud)


Raj*_*ral 7

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

var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
Run Code Online (Sandbox Code Playgroud)

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

Environment.UserName - Will Display format : 'Username'
Run Code Online (Sandbox Code Playgroud)


小智 5

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

你只需要User.Identity.Name.


Cla*_*ith 5

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

这将获得当前登录的Windows用户.