在 ASP.NET Core 中,默认情况下当发生500或404错误时,只返回http状态码,不返回任何内容,页面一片空白。
如果在 Startup.cs 的 Configure() 中加上 app.UseStatusCodePages(); ,500错误时依然是一片空白(不知为何对500错误不起作用),404错误时有所改观,页面会显示下面的文字:
Status Code: 404; Not Found
如果我们想不管500还是404错误都显示友好的自定义错误页面,该如何实现呢?请看下面的分解。
对于500错误,我们改用 app.UseExceptionHandler() 进行截获;
对于404错误,我们用 app.UseStatusCodePages() 的增强版 app.UseStatusCodePagesWithReExecute() 进行截获;
然后转交给显示自定义错误页面的URL进行处理。
app.UseExceptionHandler("/errors/500"); app.UseStatusCodePagesWithReExecute("/errors/{0}");
接着针对上面的URL,在 MVC Controller 中实现之。
public class ErrorsController : Controller { [Route("errors/{statusCode}")] public IActionResult CustomError(int statusCode) { if(statusCode == 404) { return View("~/Views/Errors/404.cshtml"); } return View("~/Views/Errors/500.cshtml"); } }
时间: 2024-10-17 09:32:50