From 579ee6fb62772f3ac4bf5287222328fb86608408 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 12 Mar 2024 19:34:47 +0800 Subject: [PATCH] Skip handle exception when `ExceptionHandled` is `true`. Set `ExceptionHandled` to `true` instead of set `Exception` to `null` after handing the exception. --- .../AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs | 7 ++++++- .../Mvc/ExceptionHandling/AbpExceptionPageFilter.cs | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs index a63e557198..d2abae0902 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs @@ -36,6 +36,11 @@ public class AbpExceptionFilter : IAsyncExceptionFilter, IAbpFilter, ITransientD { //TODO: Create DontWrap attribute to control wrapping..? + if (context.ExceptionHandled) + { + return false; + } + if (context.ActionDescriptor.IsControllerAction() && context.ActionDescriptor.HasObjectResult()) { @@ -78,7 +83,7 @@ public class AbpExceptionFilter : IAsyncExceptionFilter, IAbpFilter, ITransientD context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); } - context.Exception = null!; //Handled! + context.ExceptionHandled = true; //Handled! } protected virtual void LogException(ExceptionContext context, out RemoteServiceErrorInfo remoteServiceErrorInfo) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs index 97c21268fe..f404f52e5d 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs @@ -70,6 +70,11 @@ public class AbpExceptionPageFilter : IAsyncPageFilter, IAbpFilter, ITransientDe { //TODO: Trigger an AbpExceptionHandled event or something like that. + if (context.ExceptionHandled) + { + return; + } + var exceptionHandlingOptions = context.GetRequiredService>().Value; var exceptionToErrorInfoConverter = context.GetRequiredService(); var remoteServiceErrorInfo = exceptionToErrorInfoConverter.Convert(context.Exception!, options => @@ -106,6 +111,6 @@ public class AbpExceptionPageFilter : IAsyncPageFilter, IAbpFilter, ITransientDe context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); } - context.Exception = null; //Handled! + context.ExceptionHandled = true; //Handled! } }