全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

ASP.NET Core怎么实现全局异常处理 ASP.NET Core全局异常中间件

ASP.NET Core 全局异常处理最常用方式是使用 UseExceptionHandler 和 UseDeveloperExceptionPage 中间件;前者用于所有环境并支持自定义错误响应,后者仅开发环境启用以显示详细错误页;需按顺序注册,结合日志记录与类型判断实现差异化处理。

ASP.NET Core 实现全局异常处理,最常用且推荐的方式是使用内置的 异常处理中间件,比如 UseExceptionHandlerUseDeveloperExceptionPage。它们能捕获未被 try-catch 拦截的异常,并统一返回友好响应,避免堆栈信息暴露给生产环境用户。

配置全局异常处理中间件

Program.cs(.NET 6+)中,按顺序注册异常处理中间件:

  • UseDeveloperExceptionPage() 仅用于开发环境,显示详细错误页(含源码、变量、调用栈)
  • UseExceptionHandler() 用于所有环境,可指定自定义错误处理路径(如 /error)或内联委托处理异常

示例:

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
// ... 其他中间件

自定义错误处理页面或 API 响应

若使用 UseExceptionHandler("/Error"),需确保有对应端点(如 MVC 的 Error Action 或 Minimal API 路由)来接收并处理异常上下文:

  • MVC 中可在 Controllers/SharedController.cs 添加 Error 方法,通过 IHttpContextAccessorHttpContext.Features.Get() 获取异常详情
  • API 场景下更推荐用内联委托直接返回 JSON 错误响应,例如:
app.UseExceptionHandler(errorApp =>
{
    errorApp.Run(async context =>
    {
        context.Response.StatusCode = StatusCodes.Status500InternalServerError;
        context.Response.ContentType = "application/json";

        var feature = context.Features.Get();
        var ex = feature?.Error;

        var response = new
        {
            error = "An unexpected error occurred.",
            detail = ex?.Message,
            traceId = context.TraceIdentifier
        };

        await context.Response.WriteAsJsonAsync(response);
    });
});

捕获特定异常并差异化响应

如果需要对不同异常类型(如 ValidationExceptionNotFoundException)返回不同状态码或消息,可以在自定义异常处理逻辑中做类型判断:

  • 检查 feature.Error is ValidationException vEx,返回 400 并附带验证失败字段
  • 判断是否为自定义业务异常(如继承自 BusinessException),提取 ErrorCode 或 UserMessage
  • 注意:中间件捕获的是“未处理异常”,所以 Controller 层已 catch 并 handled 的异常不会到达这里

日志记录与监控集成

全局异常处理是记录错误日志的关键入口:

  • UseExceptionHandler 委托中注入 ILogger,记录异常详情和请求上下文(如 URL、Method、User ID)
  • 结合 Serilog、Application Insights 等工具,自动上报异常指标和追踪链路
  • 避免在日志中打印敏感数据(如密码、Token),建议脱敏后再记录

基本上就这些。合理配置 UseExceptionHandler 就能覆盖绝大多数场景,再配合结构化日志和前端友好的错误响应,全局异常处理就稳了。


# js  # 前端  # json  # app  # access  # 工具  #   # ai  # 路由  # nas  # 状态码  # 开发环境  # 敏感数据  # .net  # red  # mvc  # 中间件  # try  # catch  # Error  # Token  # 继承  #   # 委托  # 自定义  # 最常用  # 差异化  # 的是  # 就能  # 可在  # 未被  # 仅用  # 链路  # 结构化 


相关文章: 制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  如何在腾讯云免费申请建站?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何通过商城自助建站源码实现零基础高效建站?  建站上市公司网站建设方案与SEO优化服务定制指南  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  如何通过IIS搭建网站并配置访问权限?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  建站之星官网登录失败?如何快速解决?  深圳网站制作培训,深圳哪些招聘网站比较好?  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何用好域名打造高点击率的自主建站?  如何在新浪SAE免费搭建个人博客?  如何通过宝塔面板实现本地网站访问?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  如何高效完成自助建站业务培训?  音乐网站服务器如何优化API响应速度?  制作营销网站公司,淘特是干什么用的?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  制作网站公司那家好,网络公司是做什么的?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  网页设计与网站制作内容,怎样注册网站?  如何选择适合PHP云建站的开源框架?  网站制作企业,网站的banner和导航栏是指什么?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  北京制作网站的公司,北京铁路集团官方网站?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  如何用低价快速搭建高质量网站?  建站之星如何修改网站生成路径?  建站之星价格显示格式升级,你的预算足够吗?  如何零基础开发自助建站系统?完整教程解析  如何通过VPS搭建网站快速盈利?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何通过主机屋免费建站教程十分钟搭建网站?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  高性价比服务器租赁——企业级配置与24小时运维服务  如何通过VPS建站实现广告与增值服务盈利?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  建站主机选哪种环境更利于SEO优化?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  建站之星如何助力网站排名飙升?揭秘高效技巧  建站中国官网:模板定制+SEO优化+建站流程一站式指南  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  如何快速搭建支持数据库操作的智能建站平台?  盐城做公司网站,江苏电子版退休证办理流程?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  如何快速生成高效建站系统源代码? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。