在 C# (ASP.NET Core) 项目中,登录后,站点必须根据用户的权限列出一个带有子菜单的菜单。 此菜单出现在所有站点中。基本上是一个仪表板菜单。
这个菜单(子菜单)的内容是动态的,根据用户的许可。
所以,我想在创建一个 TagHelper 类时,获取当前登录的用户,获取该用户拥有权限的内容,并创建子菜单的内容(一些 <ul>
和 <li>
)。
我不知道这是不是最好的方法。我接受建议。
但是,如果这种方法可以使用,我如何才能在 TagHelper 类上获取当前登录的用户?
我没有 HttpContext
在这个类上,只有一个 TagHelperContext
.
标签助手:
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 类。
谢谢!
最佳答案
将 IActionContextAccessor
参数添加到您的构造函数。然后,您可以通过以下方式获取 HttpContext 及其关联的用户:
var user = actionAccessor.ActionContext.HttpContext.User;
var uid = _userManager.GetUserId(user);
您还需要在 Startup 类的 ConfigureServices 方法中注册 IActionContextAccessor
:
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
关于c# - 在 TagHelper 中获取当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40267818/