授权失败后执行ASP.NET核心MVC ActionFilter
我有一个MVC核心应用程序,它有两个过滤器。一个是检查角色成员身份的授权失败后执行ASP.NET核心MVC ActionFilter,asp.net,asp.net-core,asp.net-core-mvc,Asp.net,Asp.net Core,Asp.net Core Mvc,我有一个MVC核心应用程序,它有两个过滤器。一个是检查角色成员身份的AuthorizeFilter,另一个是验证应用程序和数据库是否同步的ActionFilter Startup.cs: services.AddMvc() .AddMvcOptions(options => { options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().AddReq
AuthorizeFilter
,另一个是验证应用程序和数据库是否同步的ActionFilter
Startup.cs:
services.AddMvc()
.AddMvcOptions(options =>
{
options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().AddRequirements(new RoleRequirement()).Build()));
options.Filters.Add(new DatabaseFilter());
})
如果存在不匹配,ActionFilter
返回显示错误消息的视图
DatabaseFilter.cs:
public void OnActionExecuting(ActionExecutingContext context)
{
if (condition)
{
context.Result = new ViewResult
{
ViewName = "DbError"
};
}
}
RoleRequirement.cs:
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, RoleRequirement requirement)
{
if (condition)
{
context.Succeed(requirement);
}
else
{
context.Fail();
}
return;
}
发生的情况是如果未经授权的用户在数据库不匹配时使用应用程序,则会显示数据库错误视图,而不是像没有数据库不匹配时那样获得403禁止响应。我宁愿他们收到禁止的信息
,则
AuthorizationFilter
在ActionFilter
之前运行,但即使设置了context.Fail()
后,它也不能使请求短路。返回此操作后,它变得明显。授权筛选器正在使请求短路。。。然后指向错误控制器操作以返回自定义403页。错误控制器没有授权,因此它会落在数据库过滤器上,数据库过滤器会返回不匹配的错误。您可以“根据文档”查找源吗?添加了对文档的引用。