如何获取当前登录的ApplicationUser(EF6)的完整对象



我为此搜索了一个解决方案,但我找到的解决方案似乎不起作用或很旧。

我有一个User对象,它有一个列表,但当我试图用UserManager来添加东西时,

var userAux = UserManager.FindById(User.Identity.GetUserId());

它返回的属性是以null形式列出的。

我还假设db。Savechanges((也不起作用,所以如果有人知道如何进行修改,如果你告诉我如何进行,我将不胜感激。

了解如何做到这一点。我错过了一次使用,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
}

最新更新