From 76d34c73e4a39bfde37d1873e9f9a834651eae83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E8=B7=91=E8=B7=91?= <510423039@qq.com> Date: Fri, 12 Jun 2026 13:59:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Mvc/Filters/AbpProExceptionFilter.cs | 53 +++++-------------- .../Mvc/Filters/AbpProResultFilter.cs | 10 ++-- 2 files changed, 20 insertions(+), 43 deletions(-) diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.AspNetCore/Microsoft/AspNetCore/Mvc/Filters/AbpProExceptionFilter.cs b/aspnet-core/frameworks/src/Lion.AbpPro.AspNetCore/Microsoft/AspNetCore/Mvc/Filters/AbpProExceptionFilter.cs index ba7e3753..ae2fb418 100644 --- a/aspnet-core/frameworks/src/Lion.AbpPro.AspNetCore/Microsoft/AspNetCore/Mvc/Filters/AbpProExceptionFilter.cs +++ b/aspnet-core/frameworks/src/Lion.AbpPro.AspNetCore/Microsoft/AspNetCore/Mvc/Filters/AbpProExceptionFilter.cs @@ -13,21 +13,19 @@ public class AbpProExceptionFilter : AbpExceptionFilter protected override async Task HandleAndWrapException(ExceptionContext context) { + if (!IsWrapResult(context)) + { + await base.HandleAndWrapException(context); + return; + } + LoggerException(context); - if (WrapResultHandler(context)) return; - await DefaultHandlerAsync(context); + WrapResultHandler(context); + context.ExceptionHandled = true; } private void LoggerException(ExceptionContext context) { - var exceptionHandlingOptions = context.GetRequiredService>().Value; - var exceptionToErrorInfoConverter = context.GetRequiredService(); - var remoteServiceErrorInfo = exceptionToErrorInfoConverter.Convert(context.Exception, options => - { - options.SendExceptionsDetailsToClients = exceptionHandlingOptions.SendExceptionsDetailsToClients; - options.SendStackTraceToClients = exceptionHandlingOptions.SendStackTraceToClients; - }); - var logger = context.GetService>(NullLogger.Instance)!; var logLevel = context.Exception.GetLogLevel(); logger.LogException(context.Exception, logLevel); @@ -36,45 +34,20 @@ public class AbpProExceptionFilter : AbpExceptionFilter /// /// webapi有WrapResult特性标签处理逻辑 /// - private bool WrapResultHandler(ExceptionContext context) + private void WrapResultHandler(ExceptionContext context) { - if (!IsWrapResult(context)) return false; - context.HttpContext.Response.StatusCode = 200; var result = SimplifyMessage(context); context.Result = new ObjectResult(result); - return true; } - /// - /// 默认异常处理逻辑 - /// - private async Task DefaultHandlerAsync(ExceptionContext context) + private bool IsWrapResult(ExceptionContext context) { - var exceptionHandlingOptions = context.GetRequiredService>().Value; - var exceptionToErrorInfoConverter = context.GetRequiredService(); - var remoteServiceErrorInfo = exceptionToErrorInfoConverter.Convert(context.Exception, options => - { - options.SendExceptionsDetailsToClients = exceptionHandlingOptions.SendExceptionsDetailsToClients; - options.SendStackTraceToClients = exceptionHandlingOptions.SendStackTraceToClients; - }); - - if (context.Exception is AbpAuthorizationException) - { - await context.HttpContext.RequestServices.GetRequiredService() - .HandleAsync(context.Exception.As(), context.HttpContext); - } - else + if (!context.ActionDescriptor.IsControllerAction()) { - context.HttpContext.Response.StatusCode = (int)context - .GetRequiredService() - .GetStatusCode(context.HttpContext, context.Exception); - context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); + return false; } - } - private bool IsWrapResult(ExceptionContext context) - { if (context.ActionDescriptor.AsControllerActionDescriptor().ControllerTypeInfo.GetCustomAttributes(typeof(WrapResultAttribute), true).Any()) { return true; @@ -137,4 +110,4 @@ public class AbpProExceptionFilter : AbpExceptionFilter return result; } -} \ No newline at end of file +} diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.AspNetCore/Microsoft/AspNetCore/Mvc/Filters/AbpProResultFilter.cs b/aspnet-core/frameworks/src/Lion.AbpPro.AspNetCore/Microsoft/AspNetCore/Mvc/Filters/AbpProResultFilter.cs index d71b2b2d..3a1cc017 100644 --- a/aspnet-core/frameworks/src/Lion.AbpPro.AspNetCore/Microsoft/AspNetCore/Mvc/Filters/AbpProResultFilter.cs +++ b/aspnet-core/frameworks/src/Lion.AbpPro.AspNetCore/Microsoft/AspNetCore/Mvc/Filters/AbpProResultFilter.cs @@ -14,9 +14,13 @@ public class AbpProResultFilter : IResultFilter, ITransientDependency context.HttpContext.Response.StatusCode = 200; var result = new WrapResult(); - if (context.Result is not EmptyResult) + if (context.Result is ObjectResult objectResult) { - result.SetSuccess(((ObjectResult)context.Result).Value); + result.SetSuccess(objectResult.Value); + } + else if (context.Result is not EmptyResult) + { + return; } var jsonSerializer = context.GetRequiredService(); @@ -32,4 +36,4 @@ public class AbpProResultFilter : IResultFilter, ITransientDependency public void OnResultExecuted(ResultExecutedContext context) { } -} \ No newline at end of file +}