如何获取当前登录的 ApplicationUser (EF6) 的完整对象
How can I get the full object of currently logged ApplicationUser (EF6)
我为此搜索了一个解决方案,但我找到的那个似乎不起作用或太旧了。
我有一个包含列表的用户对象,但是当我尝试使用 UserManager 获取它以添加内容时
var userAux = UserManager.FindById(User.Identity.GetUserId());
它 returns 我是空列表中的属性。
我还假设 db.Savechanges () 也不起作用,所以如果有人知道如何进行修改,请告诉我如何进行,我将不胜感激。
了解如何操作。我错过了一个 using 并且 VS 给我抛出了另一个随机错误。
using System.Data.Entity; <<==Important
var userId = User.Identity.GetUserId();
var userAux = db.Users.Include(u => u.ListO).First(u => u.Id == userId);
你可以在任何地方注入HttpContextAccessor
,然后使用UserManager
获取当前用户。
internal interface IAccountRepository
{
Task<User> GetCurrentUser();
}
internal class AccountRepository : IAccountRepository
{
private readonly MyDbContext my_context;
private readonly UserManager<Entities.User> user_manager;
private readonly HttpContextAccessor http_context;
public AccountRepository(UserManager<Entities.User> user_manager, MyDbContext my_context, HttpContextAccessor http_context)
{
this.user_manager = user_manager;
this.my_context = my_context;
this.http_context = http_context;
}
public async Task<User> GetCurrentUser()
{
var user = await user_manager.GetUserAsync(http_context.HttpContext.User);
return ToDto(user);
}
#region Conversion methods
internal static Entities.User ToEntity(User user)
{
if (user == null) return null;
return new Entities.User
{
Id = user.Id,
Email = user.Email,
UserName = user.UserName,
PictureUrl = user.PictureUrl
};
}
internal static User ToDto(Entities.User user)
{
if (user == null) return null;
return new User
{
Id = user.Id,
Email = user.Email,
UserName = user.UserName,
PictureUrl = user.PictureUrl
};
}
#endregion
}
我为此搜索了一个解决方案,但我找到的那个似乎不起作用或太旧了。
我有一个包含列表的用户对象,但是当我尝试使用 UserManager 获取它以添加内容时
var userAux = UserManager.FindById(User.Identity.GetUserId());
它 returns 我是空列表中的属性。
我还假设 db.Savechanges () 也不起作用,所以如果有人知道如何进行修改,请告诉我如何进行,我将不胜感激。
了解如何操作。我错过了一个 using 并且 VS 给我抛出了另一个随机错误。
using System.Data.Entity; <<==Important
var userId = User.Identity.GetUserId();
var userAux = db.Users.Include(u => u.ListO).First(u => u.Id == userId);
你可以在任何地方注入HttpContextAccessor
,然后使用UserManager
获取当前用户。
internal interface IAccountRepository
{
Task<User> GetCurrentUser();
}
internal class AccountRepository : IAccountRepository
{
private readonly MyDbContext my_context;
private readonly UserManager<Entities.User> user_manager;
private readonly HttpContextAccessor http_context;
public AccountRepository(UserManager<Entities.User> user_manager, MyDbContext my_context, HttpContextAccessor http_context)
{
this.user_manager = user_manager;
this.my_context = my_context;
this.http_context = http_context;
}
public async Task<User> GetCurrentUser()
{
var user = await user_manager.GetUserAsync(http_context.HttpContext.User);
return ToDto(user);
}
#region Conversion methods
internal static Entities.User ToEntity(User user)
{
if (user == null) return null;
return new Entities.User
{
Id = user.Id,
Email = user.Email,
UserName = user.UserName,
PictureUrl = user.PictureUrl
};
}
internal static User ToDto(Entities.User user)
{
if (user == null) return null;
return new User
{
Id = user.Id,
Email = user.Email,
UserName = user.UserName,
PictureUrl = user.PictureUrl
};
}
#endregion
}