Asp.net mvc 5 如何获取当前登录用户的用户对象

Asp.net mvc 5 如何获取当前登录用户的用户对象,asp.net-mvc-5,asp.net-identity,Asp.net Mvc 5,Asp.net Identity,在控制器中获取当前登录用户的Identity User对象(从Identity framework)的正确方法是什么 我需要针对用户(表AspNetUsers)更新一些属性,但不知道获取用户对象的正确方法,因此我可以执行以下操作: var menuItem = context.MenuItems.First(m => m.Description == "New Order"); var user = ?????????? user.MenuItems.Add(menuItem)

在控制器中获取当前登录用户的Identity User对象(从Identity framework)的正确方法是什么

我需要针对用户(表AspNetUsers)更新一些属性,但不知道获取用户对象的正确方法,因此我可以执行以下操作:

  var menuItem = context.MenuItems.First(m => m.Description == "New Order");
  var user = ??????????
  user.MenuItems.Add(menuItem);
  context.SaveChanges();
通过添加一些属性并重命名类,我稍微修改了原始用户模型:

public class User : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User> manager)
    {
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        return userIdentity;
    }
    public virtual ICollection<MenuItem> MenuItems { get; set; }
}
公共类用户:IdentityUser
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共异步任务GenerateUserIdentityAsync(用户管理器)
{
var userIdentity=wait manager.CreateIdentityAsync(这是DefaultAuthenticationTypes.ApplicationOkie);
返回用户身份;
}
公共虚拟ICollection菜单项{get;set;}
}

那么,如何从控制器中检索此
用户
对象呢?

在控制器类中,使用名称空间Microsoft.AspNet.Identity并按如下方式获取当前用户:

var user = User.Identity;
例如:

using Microsoft.AspNet.Identity;
...
public class FooController : Controller
{
    [Authorize]
    public ActionResult Index()
    {
        var user = User.Identity;
        ...
        return View();
    }
}
已编辑

获取配置文件信息: 提供向用户添加配置文件信息的步骤

要检索用户数据,您应该:

  • 获取当前登录的用户ID,以便可以在中查找该用户 ASP.NET身份识别系统
  • var currentUserId=User.Identity.GetUserId()

  • 在ASP.Identity系统中实例化UserManager,以便 启动系统中的用户
  • var-manager=newusermanager(newuserstore(new MyDbContext())

  • 获取用户对象
  • var currentUser=manager.FindById(User.Identity.GetUserId())

  • 获取有关用户的配置文件信息
  • currentUser.MyUserInfo.FirstName


    获取用户名

    var userName = User.Identity.Name;
    
    Get the user using static method created below.
    
    var user = GetCurrentUser(userName);
    
    获取用户的静态方法

                public static User GetCurrentUser(string userName)
                {
                    var userManager = new UserManager<User>(new UserStore<User>(new YourIdentityDbContext()));
                    var user = userManager.FindByName(userName);
                    return user;
                }
    
    公共静态用户GetCurrentUser(字符串用户名)
    {
    var userManager=newusermanager(newuserstore(newyourIdentityDBContext());
    var user=userManager.FindByName(用户名);
    返回用户;
    }
    
    谢谢。我已向我的用户添加了其他属性(请参见我的编辑)。如何访问这些?@Lock检查我编辑的答案。我认为这个链接应该能帮助你: