fix
This commit is contained in:
63
WebApi/Filters/GlobalExceptionFilter.cs
Normal file
63
WebApi/Filters/GlobalExceptionFilter.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user