c# - 如何在 Asp.Net Core 布局中使用用户相关数据?
问题描述
我有一个在 Asp.Net Core 上编写的网站,我想使用与登录用户相关的其他数据。因此,每次用户打开页面时,都会加载此数据。问题是我需要 _Layout.cshtml 中的这些数据,所以我不能使用控制器,也不能使用这样的代码:
@{
var user = await UserManager.GetUserAsync(User);
var data = await repository.LoadDataAsync(User?.Id);
//Data usage...
}
因为每次用户打开具有此布局的页面时都会调用它。我觉得应该有一个简单的解决方案,但我找不到。也许我应该使用缓存?
解决方案
这应该不难。
您可以注入UserManager<TUser>
页面并使用如下所示。
@inject UserManager<TheUser> userManager;
但是您要确保在尝试执行任何操作之前用户实际已登录。
因此,您也可以使用SignInManager<TUser>
.
@inject SignInManager<TheUser> signInManager;
@
{
var user=await userManager.FindByNameAsync(User.Identity.Name);
}
if(user!=null && await signInManager.IsSignedInAsync(user)){
//Do other stuffs with the user.
}
注意User
属性:
获取与执行操作关联的用户的 ClaimsPrincipal。
Microsoft.AspNetCore.Mvc
我猜它可以通过它获得。
推荐阅读
- swift - Swift Playgrounds:在 WebKit 中渲染本地 html 文件适用于模拟器,但不适用于设备
- javascript - 根据值过滤 javascript 表
- python - 为什么“qweb”报告在 odoo 中没有数据?
- c# - 套接字发送需要本地主机目标的延迟
- iis - ARR 将请求路由到服务器场中的服务器,导致在 HTTPS 中访问站点时出现 404
- python - 从文件中读取变量主机名
- javascript - 在nodejs中检索数据作为组
- python - 仅在满足两个条件时才满足的 if 语句 - Python
- git - Github 说我的分叉存储库中有更改,但这些更改已经合并到主存储库中
- laravel - 如何使用 Carbon 'diffInDays' 在视图表中显示不同的值?