文章目录
- 项目地址
- 一、自定义异常处理
- 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 注册中间件
- 给所有微服务注册
