You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:25:13