ASP.Core MVC的错误页面总是返回404,为什么?



在我的项目(. NET 6.0)我使用app.UseStatusCodePagesWithReExecute()来获取状态码并将其重定向到URL。但是当我尝试时,它总是返回404状态码。我错过什么了吗?

Program.cs

if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error/{0}");
app.UseStatusCodePagesWithReExecute("/Error/{0}");
app.UseHsts();
}
else
{
app.UseExceptionHandler("/Error/{0}");
app.UseStatusCodePagesWithReExecute("/Error/{0}");
}

ErrorController

public class ErrorController : Controller
{
[HttpGet]
public IActionResult HttpStatusCodeHandler(int statusCode)
{
if (User.IsInRole("admin"))
{
switch (statusCode)
{
case 400: ViewBag.ErrorMesage = "400"; break;
case 401: ViewBag.ErrorMesage = "401"; break;
case 403: ViewBag.ErrorMessage = "403"; break;
case 404: ViewBag.ErrorMessage = "404"; break;
case 500: ViewBag.ErrorMessage = "500"; break;
}
return View("ErrorAdmin");
}
switch (statusCode)
{
case 400: ViewBag.ErrorMesage = "400"; break;
case 401: ViewBag.ErrorMesage = "401"; break;
case 403: ViewBag.ErrorMessage = "403"; break;
case 404: ViewBag.ErrorMessage = "404"; break;
case 500: ViewBag.ErrorMessage = "500"; break;
}
return View("Error");
}

我找到解决办法了。

如果您没有经过身份验证,并且想要到达一个页面,在Error/{0}之前,它会将您重定向到Account/Login?

,然后如果这个路由不存在,它返回404到Error/{0}。

我用了这个;

services.ConfigureApplicationCookie(options =>
{
options.AccessDeniedPath = new PathString("/error/403");
options.Cookie.Name = "Cookie";
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(720);
options.LoginPath = new PathString("/login");
});

所以我有一个Login方法,当用户没有被认证时,用户将被重定向到/Login,如果没有被授权,将被重定向到/error/403

最新更新