当前位置: 首页 > 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 字段,或者根据环境自动判断是否返回详细信息(例如仅开发环境)。

http://www.xdnf.cn/news/30511.html

相关文章:

  • [密码学基础]GMT 0002-2012 SM4分组密码算法 技术规范深度解析
  • LNA设计
  • spring Ai---向量知识库(一)
  • 43.[前端开发-JavaScript高级]Day08-ES6-模板字符串-展开运算符-ES7~ES11
  • PyTorch深度学习框架60天进阶学习计划 - 第46天:自动化模型设计(一)
  • 在RK3588上使用哪个流媒体服务器合适
  • 在swiftui项目中使用WKWebView加载自定义脚本文件
  • 【HDFS入门】HDFS性能调优实战:关键参数对吞吐量的影响深度解析
  • c++ 类的语法1
  • UI文件上传
  • 深入解析进程与线程:区别、联系及Java实现
  • 设计模式-桥接模式
  • 14.解码器的Mask
  • End-to-End从混沌到秩序:基于LLM的Pipeline将非结构化数据转化为知识图谱
  • 从GET到POST:HTTP请求的攻防实战与CTF挑战解析
  • EF Core中动态加载关联的导航属性
  • 直线轴承的正确安装方式是什么?
  • LeetCode 热题 100_乘积最大子数组(88_152_中等_C++)(动态规划)
  • 虚拟现实(VR)技术在教育领域的创新应用
  • QML中的3D功能--入门开发
  • Chat2DB创始人姬朋飞:AI在 text2sql应用领域的实践
  • Java从入门到“放弃”(精通)之旅——数组的定义与使用⑥
  • 进程程序替换
  • 【橘子大模型】初探rag知识库的构建
  • Linux基础IO(八)之硬链接
  • 完整游戏排行榜系统实现
  • Redux Promise 中间件
  • C++ 数组 array ™实现动画效果全解析⚡YQW · Studio ⚡
  • Http基础
  • QML中的3D功能--自定义着色器开发