官方文档
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/error-handling?view=aspnetcore-5.0
开发异常页面
app.UseDeveloperExceptionPage();
效果:
自定义一个开发者页面
if (env.IsDevelopment()) { //app.UseDeveloperExceptionPage(); app.UseExceptionHandler("/Home/DevelopmentError"); }
控制器:
public IActionResult DevelopmentError() { var exception = HttpContext.Features.Get<IExceptionHandlerPathFeature>(); ViewBag.ExcetionPath = exception.Path;//异常路径 ViewBag.ExcetionMessage = exception.Error.Message;//异常内容 ViewBag.ExcetionStackTrace = exception.Error.StackTrace;//异常堆栈 return View(); }
视图:
@{ ViewData["Title"] = "Development Error"; } <h1>错误详细:</h1> <div class="alert alert-danger"> <h5>异常路径:</h5> <hr /> <p>@ViewBag.ExcetionPath</p> </div> <div class="alert alert-danger"> <h5>异常内容:</h5> <hr /> <p>@ViewBag.ExcetionMessage</p> </div> <div class="alert alert-danger"> <h5>异常堆栈:</h5> <hr /> <p>@ViewBag.ExcetionStackTrace</p> </div>
效果:
异常处理程序页
app.UseExceptionHandler("/Home/Error");
在HomeController下自定义Error
效果:
状态代码页
//当请求的地址不存在时,返回的页面 app.UseStatusCodePages();
效果:
状态码和重定向页
当我输入http://localhost:52062/Home/aa时,该页面首先向客户端发送“302 - 已找到”状态代码
其次重定向到 URL 模板中提供的错误处理终结点(http://localhost:52062/Home/Error),并且返回200状态码。
app.UseStatusCodePagesWithRedirects("/Home/Error");
效果:
状态码页重新执行
向客户端返回原始状态代码,错误是怎么样就返回什么状态码。
通过使用备用路径重新执行请求管道,从而生成响应正文
app.UseStatusCodePagesWithReExecute("/Home/Error");
效果: