首页 > 解决方案 > 调用请求声明的视图组件仅与控制器中具有 Authorize 属性的视图一起使用

问题描述

我有一个基于 UserClaims 获取当前用户信息的视图组件,如果我在视图中调用此视图组件但此视图的操作不包含 Authorize 属性,则声明结果将为空,但如果我从认为她的行为包含授权属性的观点,声明将不为空,

我需要在主页中调用此视图组件以检查用户是否已登录以显示登录或注销按钮

我的视图组件代码:

public class CurrentUserViewComponent : ViewComponent
{
    private readonly IUserRep _rep;
    public CurrentUserViewComponent(IUserRep rep)
    {
        _rep = rep;
    }

    public async Task<IViewComponentResult> InvokeAsync()
    {
        var user = User as ClaimsPrincipal;
        Claim userClaim = user.FindFirst(ClaimTypes.NameIdentifier);

        var currentUser = await _rep.GetItem(int.Parse(userClaim.Value));
        return View(currentUser);
    }
}

视图视图组件:

@model CI_User

<ul>
    @{
        if (Model != null)
        {
            if (Model.IsAdmin)
            {
                <li>
                    <a href="@Url.Action("Index", "Home", new { area = "Admin" })" target="_blank"><i class="fa fa-user"></i>@_loc["Admin"]</a>
                </li>
            }
            <li>
                <a href="@Url.Action("Index", "Account")"><i class="fa fa-bar-chart-o"></i>@_loc["Account"]</a>
            </li>
            <li class="exitr">
                <a href="@Url.Action("Logout", "Account")"><i class="fa fa-power-off"></i>@_loc["SignOut"]</a>
            </li>
        }
        else
        {
            <li>
                <a href="@Url.Action("Register", "Account")"><i class="fa fa-user"></i>@_loc["Register"]</a>
            </li>
            <li>
                <a href="@Url.Action("Login", "Account", new { ReturnUrl = Context.Request.Path })"><i class="fa fa-lock"></i>@_loc["SignIn"]</a>
            </li>
        }
    }
</ul>

标签: c#asp.net-mvcasp.net-core.net-coreasp.net-core-mvc

解决方案


推荐阅读