增加一些 报错信息统一拦截

This commit is contained in:
chfei committed 2026-10-23 09:52:16 +08:00
1 parent c9ac7412ab
commit 4a5fada435
3 files changed
+26 -23

No files matched your search

@@ -2,6 +2,7 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Hosting;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
@@ -12,10 +13,12 @@ namespace MAX.Framework.Commons
public class GlobalExceptionFilter : IExceptionFilter public class GlobalExceptionFilter : IExceptionFilter
{ {
private readonly ILogger<GlobalExceptionFilter> _logger; private readonly ILogger<GlobalExceptionFilter> _logger;
private readonly IHostEnvironment _environment;
public GlobalExceptionFilter(ILogger<GlobalExceptionFilter> logger) public GlobalExceptionFilter(ILogger<GlobalExceptionFilter> logger, IHostEnvironment environment)
{ {
_logger = logger; _logger = logger;
_environment = environment;
} }
public void OnException(ExceptionContext context) public void OnException(ExceptionContext context)
@@ -24,10 +27,13 @@ namespace MAX.Framework.Commons
var result = context.Exception switch var result = context.Exception switch
{ {
AppException be => ApiResult.Fail(be.Message, be.Code), AppException be => ApiResult.Fail(be.Message, be.Code, traceId),
ValidationException ve => ApiResult.Fail(ve.Message, ResultCode.ValidationError), ArgumentException arge => ApiResult.Fail(arge.Message, ResultCode.ValidationError, traceId),
UnauthorizedAccessException => ApiResult.Fail("未授权访问", ResultCode.Unauthorized), ValidationException ve => ApiResult.Fail(ve.Message, ResultCode.ValidationError, traceId),
_ => ApiResult.Fail("服务器内部错误", ResultCode.ServerError) UnauthorizedAccessException => ApiResult.Fail("未授权访问", ResultCode.Unauthorized, traceId),
_ => ApiResult.Fail(
_environment.IsDevelopment() ? context.Exception.Message : "服务器内部错误",
ResultCode.ServerError, traceId)
}; };
_logger.LogError(context.Exception, "请求异常 TraceId: {TraceId}", traceId); _logger.LogError(context.Exception, "请求异常 TraceId: {TraceId}", traceId);
+7 -3
View File
@@ -34,6 +34,10 @@ namespace MAX.Framework.Dtos
/// <summary>提示信息</summary> /// <summary>提示信息</summary>
public string? Msg { get; init; } public string? Msg { get; init; }
/// <summary>失败请求的跟踪标识,用于关联服务器日志。</summary>
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public string? TraceId { get; init; }
/// <summary>请求是否成功</summary> /// <summary>请求是否成功</summary>
public bool Success => Code == ResultCode.Success; public bool Success => Code == ResultCode.Success;
@@ -52,7 +56,7 @@ namespace MAX.Framework.Dtos
public static implicit operator ApiResult<T>(ApiResult result) public static implicit operator ApiResult<T>(ApiResult result)
{ {
ArgumentNullException.ThrowIfNull(result); ArgumentNullException.ThrowIfNull(result);
return new ApiResult<T> { Code = result.Code, Msg = result.Msg, Data = default }; return new ApiResult<T> { Code = result.Code, Msg = result.Msg, TraceId = result.TraceId, Data = default };
} }
public static ApiResult<T> Ok(T data, string msg = "操作成功") public static ApiResult<T> Ok(T data, string msg = "操作成功")
@@ -85,10 +89,10 @@ namespace MAX.Framework.Dtos
public static ApiResult Ok() public static ApiResult Ok()
=> new ApiResult { Code = ResultCode.Success, Msg = "操作成功" }; => new ApiResult { Code = ResultCode.Success, Msg = "操作成功" };
public static ApiResult Fail(string msg = "操作失败", int code = ResultCode.Fail) public static ApiResult Fail(string msg = "操作失败", int code = ResultCode.Fail, string? traceId = null)
{ {
ValidateFailureCode(code); ValidateFailureCode(code);
return new ApiResult { Code = code, Msg = msg }; return new ApiResult { Code = code, Msg = msg, TraceId = traceId };
} }
internal static void ValidateFailureCode(int code) internal static void ValidateFailureCode(int code)
@@ -36,21 +36,14 @@ namespace KJD_Web.Controllers
/// 批量按 MD5 查询图片缓存。 /// 批量按 MD5 查询图片缓存。
/// </summary> /// </summary>
[HttpPost] [HttpPost]
public ApiResult<List<ImageCacheDto>> GetImageCache(ImageCacheBatchQueryRequest request) public List<ImageCacheDto> GetImageCache(ImageCacheBatchQueryRequest request)
{ {
List<ImageCacheDto> data = new List<ImageCacheDto>(); List<ImageCacheDto> data = new List<ImageCacheDto>();
try if (request != null && request.Md5s != null)
{ {
if (request != null && request.Md5s != null) data = _imageCacheService.GetByMd5s(request.Md5s, request.Platform);
{
data = _imageCacheService.GetByMd5s(request.Md5s, request.Platform);
}
return ApiResult.Ok(data);
}
catch (ArgumentException ex)
{
return ApiResult.Fail(ex.Message);
} }
return data;
} }
@@ -63,7 +56,7 @@ namespace KJD_Web.Controllers
{ {
if (requests == null || requests.Length == 0) if (requests == null || requests.Length == 0)
{ {
return ApiResult.Fail("参数不能为空"); throw new ArgumentException("参数不能为空");
} }
var failedItems = new List<string>(); var failedItems = new List<string>();
@@ -71,7 +64,7 @@ namespace KJD_Web.Controllers
{ {
if (item == null) if (item == null)
{ {
return ApiResult.Fail("图片参数不能包含空项", ResultCode.ValidationError); throw new ArgumentException("图片参数不能包含空项");
} }
try try
{ {
@@ -88,8 +81,8 @@ namespace KJD_Web.Controllers
} }
return failedItems.Count == 0 return failedItems.Count == 0
? ApiResult.Ok() ? ApiResult.Ok()
: ApiResult.Fail("部分图片失败", failedItems); : throw new ArgumentException("部分图片失败");
} }
public class ImageCacheBatchQueryRequest public class ImageCacheBatchQueryRequest
{ {