C# 获取TagHelper中的当前用户

C# 获取TagHelper中的当前用户,c#,asp.net-core,C#,Asp.net Core,在C#(ASP.NET Core)项目中,登录后,站点必须根据用户权限列出带有子菜单的菜单。 此菜单出现在所有站点中。基本上是一个仪表板菜单 此菜单(子菜单)的内容根据用户的权限动态更改。 因此,我认为在创建TagHelper类时,可以获取当前登录的用户,获取该用户有权限的内容,并创建子菜单的内容(somes和) 我不知道这是不是最好的办法。我接受建议 但是,如果可以使用这种方法,那么如何在TagHelper类上获取当前登录的用户? 我在这个类上没有HttpContext,只有TagHelper

在C#(ASP.NET Core)项目中,登录后,站点必须根据用户权限列出带有子菜单的菜单。 此菜单出现在所有站点中。基本上是一个仪表板菜单

此菜单(子菜单)的内容根据用户的权限动态更改。 因此,我认为在创建TagHelper类时,可以获取当前登录的用户,获取该用户有权限的内容,并创建子菜单的内容(somes
  • 我不知道这是不是最好的办法。我接受建议

    但是,如果可以使用这种方法,那么如何在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)