This commit is contained in:
SunCheng
2026-02-10 17:49:19 +08:00
parent 3e18283e52
commit d052ae5197
104 changed files with 10369 additions and 3000 deletions

View File

@@ -0,0 +1,63 @@
using Application.Exceptions;
using Microsoft.AspNetCore.Mvc.Filters;
namespace WebApi.Filters;
/// <summary>
/// 全局异常过滤器
/// </summary>
/// <remarks>
/// 统一处理Application层抛出的异常转换为标准的BaseResponse格式
/// </remarks>
public class GlobalExceptionFilter(ILogger<GlobalExceptionFilter> logger) : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
BaseResponse response;
var statusCode = 500;
switch (context.Exception)
{
case ValidationException ex:
// 业务验证失败 - 400 Bad Request
logger.LogWarning(ex, "业务验证失败: {Message}", ex.Message);
response = ex.Message.Fail();
statusCode = 400;
break;
case NotFoundException ex:
// 资源未找到 - 404 Not Found
logger.LogWarning(ex, "资源未找到: {Message}", ex.Message);
response = ex.Message.Fail();
statusCode = 404;
break;
case BusinessException ex:
// 业务逻辑异常 - 500 Internal Server Error
logger.LogError(ex, "业务逻辑错误: {Message}", ex.Message);
response = ex.Message.Fail();
statusCode = 500;
break;
case Application.Exceptions.ApplicationException ex:
// 应用层一般异常 - 500 Internal Server Error
logger.LogError(ex, "应用层错误: {Message}", ex.Message);
response = ex.Message.Fail();
statusCode = 500;
break;
default:
// 未处理的异常 - 500 Internal Server Error
logger.LogError(context.Exception, "未处理的异常: {Message}", context.Exception.Message);
response = "操作失败,请稍后重试".Fail();
statusCode = 500;
break;
}
context.Result = new ObjectResult(response)
{
StatusCode = statusCode
};
context.ExceptionHandled = true;
}
}