我有IUserStore的自定义实现,因为我想使用我的存储库层。我的所有数据库表都存储了插入或最后更新行的用户名。我从HttpContext.Current获取用户名,这很有效,除非通过UserManager调用存储库,我在HttpContext.Current中得到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。这是一个问题,因为用户存储库试图获得当前的用户名。
答案 0 :(得分:0)
您可以通过将对象[HttpContextBase context]注入到类的构造函数中来获取此问题,并在context.User对象中获取用户相关信息