我有一个IUserStore的自定义实现,因为我想使用我的存储库层。我的所有数据库表都存储插入或上次更新该行的用户名。我从HttpContext.Current中获得用户名,这很好,除了当通过UserManager调用存储库时,我在HttpContext.Ccurrent中获得null。当我自己的业务层调用存储库的时候,一切都很好。(我使用的是异步版本的方法。)
有人知道UserManager中发生了什么吗?为什么会丢失当前的httpcontext?
我从帐户控制器调用用户服务:
var ir = await UserService.ChangePasswordAsync(User.Identity, vm.Password);
用户服务使用UserManager类保存新密码:
var ir = await Manager.PasswordValidator.ValidateAsync(password);
if (!ir.Succeeded)
return ir;
user.PasswordHash = Manager.PasswordHasher.HashPassword(password);
ir = await Manager.UpdateAsync(user);
UserManager使用我自己的UserStore:实现
public Task UpdateAsync(UserEntity user)
{
return UserRepo.UpdateAsync(user);
}
在这里,当我用调试器停止程序时,在HttpContext.Current中我有null。这是一个问题,因为用户存储库试图获取当前用户名。
您可以通过将object[HttpContextBase context]注入类的构造函数并在上下文中获取与用户相关的信息来解决此问题。用户对象