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

(一)Eshop(异常处理中间件)


文章目录

  • 项目地址
  • 一、自定义异常处理
    • 1.1 自定异常
    • 1.2 自定义异常处理中间件
    • 1.3 注册中间件


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、自定义异常处理

1.1 自定异常

  • BadRequestException
  • InternalServerException
  • NotFoundException

在这里插入图片描述

1.2 自定义异常处理中间件

  • 异常处理中间件
public class CustomExceptionHandler(ILogger<CustomExceptionHandler> logger): IExceptionHandler
{public async ValueTask<bool> TryHandleAsync(HttpContext context, Exception exception, CancellationToken cancellationToken){logger.LogError("Error Message: {exceptionMessage}, Time of occurrence {time}",exception.Message, DateTime.UtcNow);(string Detail, string Title, int StatusCode) details = exception switch{InternalServerException =>(exception.Message,exception.GetType().Name,context.Response.StatusCode = StatusCodes.Status500InternalServerError),ValidationException =>(exception.Message,exception.GetType().Name,context.Response.StatusCode = StatusCodes.Status400BadRequest),BadRequestException =>(exception.Message,exception.GetType().Name,context.Response.StatusCode = StatusCodes.Status400BadRequest),NotFoundException =>(exception.Message,exception.GetType().Name,context.Response.StatusCode = StatusCodes.Status404NotFound),_ =>(exception.Message,exception.GetType().Name,context.Response.StatusCode = StatusCodes.Status500InternalServerError)};var problemDetails = new ProblemDetails{Title = details.Title,Detail = details.Detail,Status = details.StatusCode,Instance = context.Request.Path};problemDetails.Extensions.Add("traceId", context.TraceIdentifier);if (exception is ValidationException validationException){problemDetails.Extensions.Add("ValidationErrors", validationException.Errors);}await context.Response.WriteAsJsonAsync(problemDetails, cancellationToken: cancellationToken);return true;}
}
  • 返回例
{"title": "ValidationException","detail": "参数验证失败","status": 400,"instance": "/api/products","traceId": "00-9d4a78437e-abc123def456-01","ValidationErrors": [{"PropertyName": "Name","ErrorMessage": "Name 不能为空"},{"PropertyName": "Age","ErrorMessage": "Age 必须大于 0"}]
}

1.3 注册中间件

  • 给所有微服务注册
    在这里插入图片描述
http://www.dtcms.com/a/285807.html

相关文章:

  • 工业数据集成中间件工具OPC Router详细介绍
  • Prompt:开启与AI高效对话的钥匙
  • pycharm windows/linux/mac快捷键
  • Ubuntu18.04开机启动执行脚本
  • 算法-查找算法
  • Git分支管理与Stash技巧:从基础到高级工作流详解
  • C++ - 仿 RabbitMQ 实现消息队列--需求分析与模块设计
  • # Redis-stable 如何在Linux系统上安装和配置
  • 文件流导出文件
  • 小米深圳大厦正式开园,为全球化竞争注入新动能
  • Golang 中 JSON 和 XML 解析与生成的完全指南
  • 一段黄昏小感
  • Linux地址空间
  • 论文分享 | LABRADOR:响应引导的针对物联网设备的黑盒模糊测试
  • 基于ASP.NET+SQL Server的网站登录注册功能设计与实现
  • 软件工程中的《资本论》
  • 文档处理控件TX Text Control系列教程:使用 C# .NET 将二维码添加到 PDF 文档
  • stack and queue 之牛刀小试
  • 【LeetCode 热题 100】199. 二叉树的右视图——(解法一)BFS
  • PDF批量拆分、合并、转图、加密一站式解决方案
  • 文件上传 ,显示文件列
  • 区别下IO多路复用,reactor,事件循环(EventLoop),Epoll这几个的概念以及之间的关系
  • uni-app 跳转外部连接
  • JS获取 CSS 中定义var变量值
  • Android性能优化之网络优化
  • LangChain 源码剖析(三):连接提示词与大语言模型的核心纽带——LLMChain
  • Jmeter使用教程
  • 闭包的定义和应用场景
  • [安洵杯 2019]easy_web
  • 深度学习×第10卷:她用一块小滤镜,在图像中找到你