ASP.NET Core:调用视图组件不尊重授权属性

时间:2017-02-17 12:29:26

标签: c# asp.net-core asp.net-core-viewcomponent

我实现了AspNetCore.Authorization并使用[Authorize]修饰了控制器类。如果我从浏览器调用Controller,这可以工作。但是,View Component可以访问数据:

查看:

@foreach (Category category in Model) {
    <a class="btn btn-block
       asp-action="Index"
   asp-controller="Note"
   asp-route-categoryid=@category.CategoryID
   asp-route-page="1">
    @category.Name
</a>

这导致View Component填充了@ category.Name中的数据,实际上浏览器的地址栏无法访问这些数据。

ViewComponent:

[Authorize]
public class NavigationMenuViewComponent : ViewComponent
{
    private INoteRepository _Repository;
    public NavigationMenuViewComponent(INoteRepository repository)
    {
        _Repository = repository;
    }
    public IViewComponentResult Invoke()
    {
        ViewBag.SelectedCategory = RouteData?.Values["category"];
        return View(_Repository.Categories
            .OrderBy(x => x.Name));
    }
}

实际上我认为,如果没有实际登录,Authorize属性将拒绝来自视图组件的调用。我怎样才能达到这样的行为?

1 个答案:

答案 0 :(得分:0)

ViewComponents不参与控制器生命周期,这意味着您无法在视图组件中使用过滤器。因此,Authorize过滤器不会被执行。

View Component必须使用ViewComponent类公开的User属性(获取当前用户的System.Security.Principal.IPrincipal。)来根据User属性的内容做出决策或更改输出。 根据应用程序使用的身份验证类型,您需要验证用户的凭据。