当前位置: 首页 > news >正文

dotnet core webapi 实现 异常处理中间件

目录

第一步:创建异常处理中间件类(自定义响应格式)

第二步:在 Program.cs 中使用中间件

三、效果


第一步:创建异常处理中间件类(自定义响应格式)

public static class ExceptionMiddlewareExtensions
{public static void ConfigureExceptionHandler(this IApplicationBuilder app, ILogger logger){app.UseExceptionHandler(appError =>{appError.Run(async context =>{context.Response.StatusCode = StatusCodes.Status500InternalServerError;context.Response.ContentType = "application/json";var contextFeature = context.Features.Get<IExceptionHandlerFeature>();if (contextFeature != null){logger.LogError($"Something went wrong: {contextFeature.Error}");await context.Response.WriteAsync(new{StatusCode = context.Response.StatusCode,Message = "Internal Server Error. Please try again later.",Detailed = contextFeature.Error.Message // 可以移除或改为只在开发模式返回}.ToStringJson());}});});}private static string ToStringJson(this object obj){return System.Text.Json.JsonSerializer.Serialize(obj);}
}

第二步:在 Program.cs 中使用中间件

var builder = WebApplication.CreateBuilder(args);// 日志支持
var logger = LoggerFactory.Create(config => config.AddConsole()).CreateLogger("GlobalExceptionHandler");var app = builder.Build();// 注册全局异常处理中间件
app.ConfigureExceptionHandler(logger);// 其他中间件(如路由、授权等)
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();app.Run();

三、效果

当你的接口中出现未捕获的异常(例如空引用、除零等)时,将统一返回如下格式的响应:

{"StatusCode": 500,"Message": "Internal Server Error. Please try again later.","Detailed": "Object reference not set to an instance of an object."
}

你可以根据需要隐藏 Detailed 字段,或者根据环境自动判断是否返回详细信息(例如仅开发环境)。

相关文章:

  • P11299 [NOISG 2021 Finals] Fraud 题解
  • 【Android面试八股文】Android系统架构【一】
  • ubuntu下gcc/g++安装及不同版本切换
  • PHP实现简单的爬虫功能
  • 在复杂性的迷宫里寻找路标 —— 读《人月神话》有感
  • 回溯算法(2):全排列问题
  • Serving入门
  • Java 动态代理实现
  • webgl入门实例-向量在图形学中的核心作用
  • 【每日八股】复习计算机网络 Day2:TCP 断开连接时四次挥手及其相关问题
  • [Java实战经验]异常处理最佳实践
  • opencv--图像处理
  • Vue3 + TypeScript中defineEmits 类型定义解析
  • LeetCode 5:最长回文子串
  • 【java实现+4种变体完整例子】排序算法中【冒泡排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • AI写代码工具分享:Cursor 高效使用攻略与实战秘籍
  • 【图片识别分类】如何快速识别照片中的水印文字,对图片进行关键字分类,快速整理水印相机拍摄图片,基于WPF和腾讯OCR的技术实现
  • QML中的3D功能--自定义着色器开发
  • 实现Azure Synapse Analytics安全地请求企业内部API返回数据
  • Flink框架十大应用场景
  • “云南舞蹈大家跳”暨牟定“三月会”下周举行,城际公交免票
  • 硅基世界的“缘分”——系统与人工智能携手进化
  • 何立峰会见美国英伟达公司总裁黄仁勋:欢迎美资企业深耕中国市场
  • 白宫称没接到中方电话,美媒:高估了关税对中国的影响力
  • 总台海峡时评:当心赖清德在关税谈判桌上把台湾送到美国盘中
  • 杭州银行副行长:一季度按揭贷款部分客群违约现象逐步增多,今年重点关注中小微企业信贷风险