【发布时间】:2014-10-12 22:31:33
【问题描述】:
我有一个 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。这是一个问题,因为用户存储库尝试获取当前用户名。
【问题讨论】:
-
为什么不获取当前登录的用户:User.Identity.Name?
-
User 属性在 mvc 的基本控制器中定义,因此只能从控制器访问。
-
你能提供一些代码吗?
-
我做了一些评论。
标签: .net asp.net-mvc asynchronous asp.net-identity httpcontext