【发布时间】:2018-03-29 12:28:17
【问题描述】:
我有一个包含两个过滤器的 MVC Core 应用程序。一个是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 Forbidden 响应那样获得 403 Forbidden 响应数据库不匹配。我希望他们收到禁止的消息。
According to the documentation,AuthorizationFilter 在ActionFilter 之前运行,但即使在设置context.Fail() 之后也不能短路请求。
【问题讨论】:
-
你能找到“根据文档”的来源吗?
-
添加了对文档的引用。
标签: asp.net asp.net-core asp.net-core-mvc