C# 获取TagHelper中的当前用户
在C#(ASP.NET Core)项目中,登录后,站点必须根据用户权限列出带有子菜单的菜单。 此菜单出现在所有站点中。基本上是一个仪表板菜单 此菜单(子菜单)的内容根据用户的权限动态更改。 因此,我认为在创建TagHelper类时,可以获取当前登录的用户,获取该用户有权限的内容,并创建子菜单的内容(somesC# 获取TagHelper中的当前用户,c#,asp.net-core,C#,Asp.net Core,在C#(ASP.NET Core)项目中,登录后,站点必须根据用户权限列出带有子菜单的菜单。 此菜单出现在所有站点中。基本上是一个仪表板菜单 此菜单(子菜单)的内容根据用户的权限动态更改。 因此,我认为在创建TagHelper类时,可以获取当前登录的用户,获取该用户有权限的内容,并创建子菜单的内容(somes和) 我不知道这是不是最好的办法。我接受建议 但是,如果可以使用这种方法,那么如何在TagHelper类上获取当前登录的用户? 我在这个类上没有HttpContext,只有TagHelper
和)
我不知道这是不是最好的办法。我接受建议
但是,如果可以使用这种方法,那么如何在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);
}
}
公共类UserContentTagHelper:TagHelper
{
私有只读用户管理器_UserManager;
公共UserContentTagHelper(UserManager UserManager)
{
_userManager=userManager;
}
公共重写异步任务ProcessAsync(TagHelperContext上下文,TagHelperOutput输出)
{
output.TagMode==TagMode.SelfClosing;
//错误。HttpContext。用户不可用
var uid=\u userManager.GetUserId(HttpContext.User);
}
}
通常,为了获取当前登录的用户,我使用HttpContext.user
,但这仅在控制器类上可用
谢谢 将IActionContextAccessor
参数添加到构造函数中。然后,您可以通过以下方式获取HttpContext及其关联用户:
var user = actionAccessor.ActionContext.HttpContext.User;
var uid = _userManager.GetUserId(user);
您还需要在Startup类的ConfigureServices方法中注册IActionContextAccessor
:
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddSingleton();
成功了!只需要配置IActionContextAccessor(services.AddSingleton();
)的DI,可能是输入错误,但uid必须是var uid=\u userManager.GetUserId(user)代码>