在我的项目(. 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