C# ASP.NET Core:调用视图组件不考虑授权属性

C# ASP.NET Core:调用视图组件不考虑授权属性,c#,asp.net-core,asp.net-core-viewcomponent,C#,Asp.net Core,Asp.net Core Viewcomponent,我实现了AspNetCore.Authorization,并用[Authorization]修饰了控制器类。如果我从浏览器中调用控制器,这是可行的。但是,视图组件可以访问数据: 视图: 实际上,我认为,Authorize属性将拒绝来自视图组件的调用(如果没有实际登录)。如何实现这种行为?ViewComponents不参与控制器生命周期,这意味着您不能在视图组件中使用过滤器。因此,Authorize过滤器将不会执行 视图组件必须使用ViewComponent类公开的用户属性(获取当前用户的Syst

我实现了AspNetCore.Authorization,并用
[Authorization]
修饰了控制器类。如果我从浏览器中调用控制器,这是可行的。但是,视图组件可以访问数据:

视图:


实际上,我认为,
Authorize
属性将拒绝来自视图组件的调用(如果没有实际登录)。如何实现这种行为?

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

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

谢谢!这让我找到了正确的方向!我使用
IHttpContextAccessor context
访问HttpContext并分配
\u User=context.HttpContext.User
,以便检查
\u User.Identity.IsAuthenticated==true
@pisker您能详细说明一下您所做的吗?我面临着完全相同的问题。
@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>
[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));
    }
}