ViewComponentAsp.NetCore中如何获取当前登录用户

How get current login user in ViewComponent Asp.Net Core

我在某些页面中使用 ViewComponent 渲染侧边栏。我需要当前登录用户进行某些操作,如何在 ViewComponent 中获取用户?当然,我可以将视图作为参数传递给 InvokeAsync 方法,但我正在寻找更好的方法。

public class SideBarViewComponent : ViewComponent
{
    private readonly UserManager<User> _userManager;

    public ProfileSideBarViewComponent(UserManager<User> userManager)
    {
        _userManager = userManager;
    }

    public async Task<IViewComponentResult> InvokeAsync()
    {
         //How access User

         _userManager.GetUserId(User);

        return View();
    }
}

嗯,您可以访问当前 HttpContext, from which you can get or set the Current User

这是一些伪代码:

var user = this.HttpContext.User;

您有权访问请求,因此您可以这样获取它:

public async Task<IViewComponentResult> InvokeAsync()
{
     _userManager.GetUserId(Request.HttpContext.User);

    return View();
}

在 ViewComponent 中可以使用 user UserClaimsPrincipal 而不是 User

在 ViewComponent 中:

public abstract class ViewComponent
{
    public ClaimsPrincipal UserClaimsPrincipal { get; }
    ....
}

在控制器中:

[Controller]
public abstract class ControllerBase
{
    protected ControllerBase();

    public ClaimsPrincipal User { get; }

    ....
}