【发布时间】:2019-11-14 01:24:00
【问题描述】:
当我将 404 指定为 http 结果代码时,UseStatusCodePagesWithReExecute 按预期工作。
当我将 403 指定为 http 结果代码时,UseStatusCodePagesWithReExecute 无法正常工作。不知何故,它就像我指定的 UseStatusCodePagesWithRedirects 一样工作。
对于 400-600 范围内的所有状态码,我需要 UseStatusCodePagesWithReExecute 的行为,包括 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 范围之外。 -
我现在正试图在 CookieAuthenticationandler 上覆盖该行为。
-
您可以使用
OnRedirectToAccessDenied做到这一点。如果您需要帮助,请告诉我。
标签: c# asp.net-core error-handling