c# - 在 TagHelper 中获取当前用户

标签 c# asp.net-core

在 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/

相关文章:

c# - 如何在 C# 中计算 fmod?

c# - 如何根据单元格背景颜色更改 WPF DataGrid 单元格小部件背景颜色?

c# - FluentValidation 自动验证请求 .NET 7 Minimal API

reactjs - 类型错误 : Cannot read property 'ts' of undefined

c# - 更改列表框中所选项目的颜色

c# - Java 泛型与 C# where 关键字

c# - 具有调用问题的线程和 GUI

c# - MVC Core IActionResult 含义

docker - 带有2个可执行项目的Dockerize .NET解决方案

c# - 在.NET Core查询里面加入for