当我指定404作为http结果代码时,
配置代码:
UseStatusCodePagesWithReExecute
按预期工作。
当我将403作为http结果代码时,UseStatusCodePagesWithReExecute
的工作方式不如预期。不知何故,它的工作方式就像我已经指定了UseStatusCodePagesWithRedirects
一样。
我需要UseStatusCodePagesWithReExecute
的行为适用于400-600范围内的所有状态代码,包括403。配置代码:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
//...
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
options.Cookie.HttpOnly = true;
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
options.Cookie.SameSite = SameSiteMode.None;
options.AccessDeniedPath = new PathString("/error/403/");
options.LoginPath = "/account/signinrouter/";
});
//...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
//...
app.UseStatusCodePagesWithReExecute("/error/{0}");
//...
}
动作代码:
public IActionResult NotFound()
{
return base.NotFound();
}
public IActionResult Forbidden()
{
return base.Forbid();
}
UseStatusCodePagesWithReExecute
无法检测到403,因为当它通过中间件返回时,它不是403。它是302,因此超出了400-600的范围。 - Kirk LarkinOnRedirectToAccessDenied
来实现。如果需要帮助请告诉我。 - Kirk Larkin