如何在ASP.NET Core 6.0中不使用DeveloperExceptionPageMiddleware
ASP.NET Core 6 禁用自动注入的DeveloperExceptionPageMiddleware方案
共有三种可行的实现方式:
1. 直接关闭自动注册逻辑(最推荐)
系统自动注入DeveloperExceptionPageMiddleware的逻辑可通过配置直接关闭,无需后续修改中间件管道:
- 在
var builder = WebApplication.CreateBuilder(args);之后,添加代码builder.WebHost.UseDeveloperExceptionPage(false);,即可关闭所有环境下的自动注册逻辑。 - 关闭后可自行注册全局错误处理中间件,实现全环境统一的错误响应,完整示例代码如下:
var builder = WebApplication.CreateBuilder(args); // 关闭DeveloperExceptionPageMiddleware自动注册 builder.WebHost.UseDeveloperExceptionPage(false); // 注册其他业务服务 builder.Services.AddControllers(); var app = builder.Build(); // 首个注册自定义错误处理中间件 // 可使用官方异常处理中间件,也可替换为自研的自定义中间件 app.UseExceptionHandler("/error"); // 注册其他业务中间件 app.UseRouting(); app.UseAuthorization(); app.MapControllers(); app.Run();
2. 自定义错误处理中间件前置注册
中间件管道按注册顺序执行,只要将自定义错误处理中间件注册到所有其他中间件的最前面,提前捕获异常并完成响应,后续的DeveloperExceptionPageMiddleware永远不会被触发:
- 无需修改默认的自动注册逻辑,只需要保证
app.UseExceptionHandler()或者你的自定义错误处理中间件,是var app = builder.Build();之后注册的第一个中间件即可。 - 该方案适合仍需要在部分场景下保留DeveloperExceptionPageMiddleware能力的使用场景。
3. 手动移除已注册的中间件
如果是第三方类库等不受控制的逻辑注册了DeveloperExceptionPageMiddleware,可在服务注册阶段直接移除该中间件的服务注册,使其无法被实例化:
- 在服务注册阶段添加代码:
builder.Services.RemoveAll(typeof(DeveloperExceptionPageMiddleware));即可。 - 该方案会导致所有尝试使用DeveloperExceptionPageMiddleware的逻辑失效,适合需要彻底清除该中间件的场景。
内容的提问来源于stack exchange,提问作者Colin DeClue
相关产品推荐
相关产品推荐

