在C#(ASP.NET Core)项目中,登录后,该站点必须根据用户的权限列出带有子菜单的菜单。 此菜单显示在所有站点中。基本上是仪表板菜单。
根据用户的许可,此菜单(子菜单)的内容是动态的。
因此,我认为在创建TagHelper类时,获取当前记录的用户,获取该用户拥有权限的内容,并创建子菜单的内容(某些<ul>
和<li>
)。
我不知道这是否是最佳方法。我接受建议。
但是,如果这种方法可以使用,我如何在TagHelper类上获取当前登录的用户?
我在这个课程上没有HttpContext
,只有TagHelperContext
。
TagHelper:
public class UserContentTagHelper : TagHelper
{
private readonly UserManager<ApplicationUser> _userManager;
public UserContentTagHelper(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagMode == TagMode.SelfClosing;
// Error. HttpContext.User not avaliable
var uid = _userManager.GetUserId(HttpContext.User);
}
}
通常,为了获取当前登录的用户,我使用HttpContext.User
,但这仅适用于Controller类。
谢谢!
答案 0 :(得分:4)
在构造函数中添加IActionContextAccessor
参数。然后,您可以使用以下命令获取HttpContext及其关联用户:
var user = actionAccessor.ActionContext.HttpContext.User;
var uid = _userManager.GetUserId(user);
您还需要在Startup类的ConfigureServices方法中注册IActionContextAccessor
:
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();