Files
EmailBill/WebApi/Filters/GlobalExceptionFilter.cs
SunCheng d052ae5197 fix
2026-02-10 17:49:19 +08:00

64 lines
2.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}