我实现了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
属性将拒绝来自视图组件的调用。我怎样才能达到这样的行为?
答案 0 :(得分:0)
ViewComponents不参与控制器生命周期,这意味着您无法在视图组件中使用过滤器。因此,Authorize
过滤器不会被执行。
View Component必须使用ViewComponent类公开的User属性(获取当前用户的System.Security.Principal.IPrincipal。)来根据User属性的内容做出决策或更改输出。 根据应用程序使用的身份验证类型,您需要验证用户的凭据。