我们可以通过这种方式获得ApplicationUser
:
var owinContext = HttpContext.GetOwinContext();
var userManager = owinContext.GetUserManager<ApplicationUserManager>();
var user = await userManager.FindByIdAsync(User.Identity.GetUserId());
为此,我们需要在UserStore IUserStore<TUser, in TKey>
中实现此方法:
Task<TUser> FindByIdAsync(TKey userId);
此方法通过数据库加载应用程序用户(在我的情况下通过实体框架)。我将在我的应用程序的不同层中需要此对象。在当前状态下,它将导致仅针对一个Web请求的多个数据库请求(对于同一对象)。
缓存此对象的推荐方法是什么?
我想到了一个Session
对象,但我100%肯定,这很愚蠢,因为有时用户对象可以更改(密码,电子邮件,显示名称等)。