我有一個MVC Core應用程序,它有兩個過濾器。一個是AuthorizeFilter
來檢查角色成員資格,另一個是ActionFilter
,用於驗證應用程序和數據庫是否同步。授權失敗後執行ASP.NET Core MVC 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響應,就像沒有數據庫不匹配一樣。我寧願他們收到禁止的消息。
According to the documentation,在ActionFilter
前AuthorizationFilter
運行,但它不能是短路甚至設置context.Fail()
後的請求。
你能源「根據文件」? – spottedmahn
增加了對文檔的引用。 – Valuator