C# 如何获取当前用户,以及如何在MVC5中使用用户类? 如何获取MVC 5中当前登录用户的id?我尝试了StackOverflow建议,但它们似乎不适用于MVC5 另外,MVC5为用户分配资源的最佳实践是什么?(例如,用户应具有项。是否应将用户的Id存储在项中?是否可以使用列表导航属性扩展用户类

C# 如何获取当前用户,以及如何在MVC5中使用用户类? 如何获取MVC 5中当前登录用户的id?我尝试了StackOverflow建议,但它们似乎不适用于MVC5 另外,MVC5为用户分配资源的最佳实践是什么?(例如,用户应具有项。是否应将用户的Id存储在项中?是否可以使用列表导航属性扩展用户类,c#,asp.net,asp.net-mvc,asp.net-mvc-5,asp.net-identity,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Asp.net Identity,我正在使用MVC模板中的“个人用户帐户” 尝试了以下方法: -这会引发以下问题: “Membership.GetUser()”为空 如果您在ASP.NET MVC控制器中编码,请使用 using Microsoft.AspNet.Identity; ... User.Identity.GetUserId(); HttpContext.Current.User.Identity.GetUserId(); 值得一提的是,User.Identity.IsAuthenticated和Us

我正在使用MVC模板中的“个人用户帐户”

尝试了以下方法:

  • -这会引发以下问题:
“Membership.GetUser()”为空


如果您在ASP.NET MVC控制器中编码,请使用

using Microsoft.AspNet.Identity;

...

User.Identity.GetUserId();
HttpContext.Current.User.Identity.GetUserId();
值得一提的是,
User.Identity.IsAuthenticated
User.Identity.Name
将在不使用语句添加上述
的情况下工作。但是没有它,
GetUserId()

如果您所在的类不是控制器,请使用

using Microsoft.AspNet.Identity;

...

User.Identity.GetUserId();
HttpContext.Current.User.Identity.GetUserId();
在MVC5的默认模板中,用户ID是存储为字符串的GUID

尚未找到最佳实践,但找到了一些关于扩展用户配置文件的宝贵信息:

  • 标识概述
  • 有关如何通过添加额外属性扩展用户配置文件的示例解决方案:

    • 获取Id非常简单,您已经解决了这一问题

      不过,你的第二个问题有点复杂

      所以,现在这些都是预发布的内容,但您面临的常见问题是,您在使用新属性(或您的问题中的项目集合)扩展用户

      开箱即用,您将在Models文件夹下获得一个名为
      IdentityModel
      的文件(在撰写本文时)。其中有两个类;
      ApplicationUser
      ApplicationDbContext
      。要添加
      项的集合
      ,您需要修改
      ApplicationUser
      类,就像您在实体框架中使用的普通类一样。事实上,如果您快速查看ood您会发现,所有与身份相关的类(用户、角色等)现在都只是POCO,具有适当的数据注释,因此它们与EF6配合得很好

      接下来,需要对
      AccountController
      构造函数进行一些更改,以便它知道如何使用DbContext

      public AccountController()
      {
          IdentityManager = new AuthenticationIdentityManager(
          new IdentityStore(new ApplicationDbContext()));
      }
      
      老实说,为登录用户获取整个用户对象有点深奥

          var userWithItems = (ApplicationUser)await IdentityManager.Store.Users
          .FindAsync(User.Identity.GetUserId(), CancellationToken.None);
      
      该行将完成任务,您将能够访问
      userWithItems.Items
      ,如您所愿


      HTH

      我感觉到你的痛苦,我也在尝试做同样的事情。在我的情况下,我只想清除用户

      我已经创建了一个基本控制器类,我的所有控制器都从该类继承。在该类中,我覆盖了身份验证
,并将
filterContext.HttpContext.User设置为null

这是我迄今为止所做的最好的

public abstract class ApplicationController : Controller   
{
    ...
    protected override void OnAuthentication(AuthenticationContext filterContext)
    {
        base.OnAuthentication(filterContext); 

        if ( ... )
        {
            // You may find that modifying the 
            // filterContext.HttpContext.User 
            // here works as desired. 
            // In my case I just set it to null
            filterContext.HttpContext.User = null;
        }
    }
    ...
}
尝试以下方法:

var store = new UserStore<ApplicationUser>(new ApplicationDbContext());
var userManager = new UserManager<ApplicationUser>(store);
ApplicationUser user = userManager.FindByNameAsync(User.Identity.Name).Result;
var store=new UserStore(new ApplicationDbContext());
var userManager=新的userManager(存储);
ApplicationUser user=userManager.FindByNameAsync(user.Identity.Name).Result;

与RTM配合使用。

如果希望ApplicationUser对象包含在一行代码中(如果安装了最新的ASP.NET标识),请尝试:


如果其他人有这种情况: 我正在创建一个电子邮件验证来登录到我的应用程序,这样我的用户还没有登录,但是我使用下面的内容来检查登录时输入的电子邮件,这是@firecape solution的一个变体

 ApplicationUser user = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindByEmail(Email.Text);


在.Net MVC5 core 2.2中,我使用了HttpContext.User.Identity.Name。它对我很有用。

这就是我获取AspNetUser Id并将其显示在主页上的方式

我在HomeController Index()方法中放置了以下代码

在查看页面中,只需调用

ViewBag.userId 

运行该项目,您将能够看到您的用户ID添加了我尝试过的内容的引用。最后一个在MVC4中是可以的,但在MVC5中不是。此外,我需要一些“使用用户”的最佳实践:)当您说您使用MVC 5时,您使用什么作为成员资格?OWin.Security?MVC模板中的“个人用户帐户”。
HttpContext.Current.User.Identity.Name
是当前登录用户的名称。如何获取Id?我想将当前用户分配给他创建的
,但不基于用户名(可能会更改)。“HttpContext.Current”System.Web.HttpContextBase不包含“Current”的定义,并且找不到接受“System.Web.HttpContextBase”类型的第一个参数的扩展方法“Current”(是否缺少using指令或程序集引用?)。您确定您的解决方案适用于MVC 5吗?ASP.NET MVC 5的用户身份验证和授权已更改。现在,它是一种基于声明的身份验证,具有接口和通用存储库,可以与EF或其他提供者一起使用(EF实现是默认的)。由于
GetUserId
是存储在
Ass_Start\IdentityConfig.cs
底部的一个扩展方法,无论您需要在何处使用它,如果在不同的命名空间上,您都必须使用Microsoft.AspNet.Identity
设置
,以使扩展可见。survey.UserId=Guid.Parse(User.Identity.GetUserId());如果我添加using reference,用户是否仍带有红色下划线?为什么会这样?@Zapnologica:尝试重建项目,可能VS IntelliSense有点慢。注意用户仅在控制器中可用(@Zapnologica是否在控制器之外使用它?请尝试HttpContext.Current.User.Identity.GetUserId();)“我不认为所有这些都有类似于预发布文档的东西吗?”德里克·托姆斯(Derek Tomes)——我没见过。我想我们得等到11月13日才能看到真正的医生。老实说,这并不好,甚至有人要求在uservoice-o上提供更好的指导
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
ViewBag.userId = User.Identity.GetUserId();
ViewBag.userId