Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
授权失败后执行ASP.NET核心MVC ActionFilter_Asp.net_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

授权失败后执行ASP.NET核心MVC ActionFilter

授权失败后执行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

我有一个MVC核心应用程序,它有两个过滤器。一个是检查角色成员身份的
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页。错误控制器没有授权,因此它会落在数据库过滤器上,数据库过滤器会返回不匹配的错误。

您可以“根据文档”查找源吗?添加了对文档的引用。