!100 update Yi.Abp.Net8/framework/Yi.Framework.AspNetCore/UnifyResult/Fiters/FriendlyExceptionFilter.cs.

Merge pull request !100 from Gary/N/A
This commit is contained in:
橙子
2025-09-22 07:14:02 +00:00
committed by Gitee

View File

@@ -1,4 +1,4 @@
// MIT 许可证 // MIT 许可证
// //
// 版权 © 2020-present 百小僧, 百签科技(广东)有限公司 和所有贡献者 // 版权 © 2020-present 百小僧, 百签科技(广东)有限公司 和所有贡献者
// //
@@ -17,8 +17,9 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.DependencyInjection; using Volo.Abp.Validation;
using Yi.Framework.Core.Extensions; using Yi.Framework.Core.Extensions;
namespace Yi.Framework.AspNetCore.UnifyResult.Fiters; namespace Yi.Framework.AspNetCore.UnifyResult.Fiters;
@@ -35,7 +36,6 @@ public sealed class FriendlyExceptionFilter : IAsyncExceptionFilter
/// <returns></returns> /// <returns></returns>
public async Task OnExceptionAsync(ExceptionContext context) public async Task OnExceptionAsync(ExceptionContext context)
{ {
// 排除 WebSocket 请求处理 // 排除 WebSocket 请求处理
if (context.HttpContext.IsWebSocketRequest()) return; if (context.HttpContext.IsWebSocketRequest()) return;
@@ -44,16 +44,19 @@ public sealed class FriendlyExceptionFilter : IAsyncExceptionFilter
// 解析异常信息 // 解析异常信息
var exceptionMetadata = GetExceptionMetadata(context); var exceptionMetadata = GetExceptionMetadata(context);
var unifyResult = context.GetRequiredService<IUnifyResultProvider>();
IUnifyResultProvider unifyResult = context.GetRequiredService<IUnifyResultProvider>();
// 执行规范化异常处理 // 执行规范化异常处理
context.Result = unifyResult.OnException(context, exceptionMetadata); context.Result = unifyResult.OnException(context, exceptionMetadata);
// 创建日志记录器 // 创建日志记录器
var logger = context.HttpContext.RequestServices.GetRequiredService<ILogger<FriendlyExceptionFilter>>(); var logger = context.HttpContext.RequestServices.GetRequiredService<ILogger<FriendlyExceptionFilter>>();
var errorMsg = "";
if (exceptionMetadata.Errors != null) errorMsg = "\n" + JsonConvert.SerializeObject(exceptionMetadata.Errors);
// 记录拦截日常 // 记录拦截日常
logger.LogError(context.Exception, context.Exception.Message); logger.LogError(context.Exception, context.Exception.Message + errorMsg);
} }
/// <summary> /// <summary>
@@ -74,22 +77,25 @@ public sealed class FriendlyExceptionFilter : IAsyncExceptionFilter
// 判断是否是 ExceptionContext 或者 ActionExecutedContext // 判断是否是 ExceptionContext 或者 ActionExecutedContext
var exception = context is ExceptionContext exContext var exception = context is ExceptionContext exContext
? exContext.Exception ? exContext.Exception
: ( : context is ActionExecutedContext edContext
context is ActionExecutedContext edContext
? edContext.Exception ? edContext.Exception
: default : default;
);
if (exception is AbpValidationException validationException)
{
errors = validationException.ValidationErrors;
isValidationException = true;
}
// 判断是否是友好异常 // 判断是否是友好异常
if (exception is UserFriendlyException friendlyException) if (exception is UserFriendlyException friendlyException)
{ {
int statusCode2 = 500; var statusCode2 = 500;
int.TryParse(friendlyException.Code, out statusCode2); int.TryParse(friendlyException.Code, out statusCode2);
isFriendlyException = true; isFriendlyException = true;
errorCode = friendlyException.Code; errorCode = friendlyException.Code;
originErrorCode = friendlyException.Code; originErrorCode = friendlyException.Code;
statusCode = statusCode2 == 0 ? 403 : statusCode2; statusCode = statusCode2 == 0 ? 403 : statusCode2;
isValidationException = false;
errors = friendlyException.Message; errors = friendlyException.Message;
data = friendlyException.Data; data = friendlyException.Data;
} }