获取TagHelper

时间:2016-10-26 16:41:29

标签: c# asp.net-core

在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类。

谢谢!

1 个答案:

答案 0 :(得分:4)

在构造函数中添加IActionContextAccessor参数。然后,您可以使用以下命令获取HttpContext及其关联用户:

var user = actionAccessor.ActionContext.HttpContext.User;
var uid = _userManager.GetUserId(user);

您还需要在Startup类的ConfigureServices方法中注册IActionContextAccessor

services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();