在 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");
后来发现一个问题,当出现底层异常时,自定义错误页面不能显示,还是一片空白,比如下面的异常:
System.DllNotFoundException: Unable to load DLL 'System.Security.Cryptography.Native.Apple': The specified module could not be found.
(Exception from HRESULT: 0x8007007E)
这时想到用 MVC 显示自定义错误页面的局限,如果发生的异常导致 MVC 本身不能正常工作,自定义错误页面就无法显示。
于是针对这个问题进行了改进,针对500错误直接用静态文件的方式进行响应,Startup.cs 的 Configure() 中的代码如下:
app.UseExceptionHandler(errorApp =>
errorApp.Run(async context =>
context.Response.StatusCode = 500;
if (context.Request.Headers["X-Requested-With"] != "XMLHttpRequest")
context.Response.ContentType = "text/html";
await context.Response.SendFileAsync($@"{env.WebRootPath}/errors/500.html");
app.UseStatusCodePagesWithReExecute("/errors/{0}");
为了重用自定义错误页面,MVC Controller 中已进行了修改:
public class ErrorsController : Controller
private IHostingEnvironment _env;
public ErrorsController(IHostingEnvironment env)
_env = env;
[Route("errors/{statusCode}")]
public IActionResult CustomError(int statusCode)
var filePath = $"{_env.WebRootPath}/errors/{(statusCode == 404?404:500)}.html";
return new PhysicalFileResult(filePath, new MediaTypeHeaderValue("text/html"));
在 ASP.NET Core 中,默认情况下当发生500或404错误时,只返回http状态码,不返回任何内容,页面一片空白。如果在 Startup.cs 的 Configure() 中加上 app.UseStatusCodePages(); ,500错误时依然是一片空白(不知为何对500错误不起作用),404错误时有所改观,页面会显示下面的文字:Status Code: 404; No...
之前的博文 ASP.NET Core中显示自定义错误页面 中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取。
在这篇博文中改用middleware实现,并且放在独立的项目中发布成NuGet包,项目中使用时只需安装NuGet包,然后在Startup的Configure()方法中添加如下的一行代码。
app.UseCustomErrorPages();
相信每位程序员们应该都知道在 ASP.NET Core 中,默认情况下当发生500或404错误时,只返回http状态码,不返回任何内容,页面一片空白。
如果在 Startup.cs 的 Configure() 中加上 app.UseStatusCodePages(); ,500错误时依然是一片空白(不知为何对500错误不起作用),404错误时有所改观,页面会显示下面的文字:
Status Code: 404; Not Found
如果我们想实现不管500还是404错误都显示自己定制的友好错误页面,那该怎么办呢?
对于500错误,我们可以用 app.UseExceptionHandle
异常是应用程序中发生的运行时错误。 如果处理不当,将终止正在运行的程序。 我们如何防止这种情况发生? 我们可以使用全局异常处理程序来确保捕获所有未处理的异常。
为了在ASP.Net Core Web API中实现全局异常处理,我们可以利用内置的中间件UseExceptionHandler。 中间件是插入到请求处理管道中的软件组件,用于处理请求和响应。
[.Net路线图: .Net St...
此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/error-handling?view=aspnetcore-5.0
框架具有用于处理错误的内置功能,如:
开发人员异常页
自定义错误页
静态状态代码页
启动异常处理
1.异常处理lambda
public void Configure(IApplicationBuilder app, IWebHost.
我们在使用某些系统的时候,如果访问了一个不存在的地址怎么办,比如http://52abp. com/airport/fly;或者访问的地址路由和操作方法虽然存在,但是地址参数id不存在,比如https://www.52abp.com/BlogDetails/5这个信息是存在的,但是更改访问https://www.52abp.com/BlogDetails/100时,则提示博客内容不存在。
在我们的系统
中要如何处理呢?
本章主要向读者介绍如下内容。
ASP.NET Core MVC
中的两种404
错误。
好的,你想了解 .NET Core 自定义中间件。中间件是 ASP.NET Core 应用程序中处理 HTTP 请求和响应的组件。它们使用管道模式,其中每个中间件组件都按顺序执行,可以在管道中执行特定的操作,例如验证身份、记录请求和响应等。以下是创建自定义中间件的步骤:
1. 创建一个类并实现 `IMiddleware` 接口。
2. 在类中实现 `InvokeAsync` 方法,该方法接收一个 `HttpContext` 对象和一个 `RequestDelegate` 委托对象。
3. 在 `InvokeAsync` 方法中编写代码以处理请求和响应,并调用 `RequestDelegate` 委托对象来继续管道中的下一个中间件。
4. 在 `Startup.cs` 文件的 `Configure` 方法中使用 `UseMiddleware<T>` 方法将自定义中间件添加到管道中,其中 `T` 是自定义中间件类的名称。
下面是一个示例代码:
public class CustomMiddleware : IMiddleware
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
// 在此处编写处理请求和响应的代码
await next(context);
// Startup.cs 文件中的 Configure 方法
public void Configure(IApplicationBuilder app)
app.UseMiddleware<CustomMiddleware>();
希望这可以帮助你了解如何创建自定义中间件。