.NET Core 3.1中app.UseExceptionHandler抛异常时不触发求助
全局异常处理器未触发的解决建议
核心问题:中间件注册顺序错误
UseDeveloperExceptionPage 中间件会捕获并处理异常,且它的注册顺序在 UseExceptionHandler 之后,导致异常被前者拦截,你的全局异常处理器根本没机会执行。中间件是按照注册顺序依次执行的,异常处理类中间件需要优先注册在其他可能捕获异常的中间件之前。
修复步骤
修改 Startup.cs 中的 Configure 方法,调整中间件顺序,将 UseDeveloperExceptionPage 移到 UseExceptionHandler 之前(如果需要在开发环境保留它,建议结合环境判断):
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // 开发环境使用开发者异常页,非开发环境走自定义异常处理器 if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 自定义全局异常处理器,确保在其他业务中间件之前注册 app.UseExceptionHandler(errorApp => { errorApp.Run(async context => { var ex = context.Features.Get<IExceptionHandlerFeature>(); if (ex != null) { var errorMessage = $"Error: {ex.Error.Message}"; _logger.LogError(errorMessage, ex); await context.Response.WriteAsync(errorMessage).ConfigureAwait(false); } }); }); app.UseRequestTracking(); app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); app.UseAuthentication(); app.UseAuthorization(); app.UseMvc(); }
额外验证点
- 暂时注释掉
UseDeveloperExceptionPage,直接验证自定义异常处理器是否生效。 - 确认请求没有被更早的中间件(如认证、CORS)提前拦截终止。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

