From 9dfc40a76a96cfdd86ac6105c346eca0d139d2ef Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 26 Feb 2020 09:03:45 +0100 Subject: [PATCH] More improvements for exceptions. --- .../Squidex.Web/ApiExceptionFilterAttribute.cs | 2 +- .../Pipeline/DefaultExceptionHandler.cs | 3 ++- .../Squidex.Web/Pipeline/IExceptionHandler.cs | 3 ++- .../Pipeline/RequestExceptionMiddleware.cs | 2 +- .../src/Squidex/Config/Web/WebExtensions.cs | 1 + .../ApiExceptionFilterAttributeTests.cs | 18 +++++++++--------- 6 files changed, 16 insertions(+), 13 deletions(-) diff --git a/backend/src/Squidex.Web/ApiExceptionFilterAttribute.cs b/backend/src/Squidex.Web/ApiExceptionFilterAttribute.cs index 11eacda19..042031a84 100644 --- a/backend/src/Squidex.Web/ApiExceptionFilterAttribute.cs +++ b/backend/src/Squidex.Web/ApiExceptionFilterAttribute.cs @@ -35,7 +35,7 @@ namespace Squidex.Web { var exceptionHandler = context.HttpContext.RequestServices.GetService(); - exceptionHandler?.Handle(context.Exception); + exceptionHandler.Handle(context.Exception, context.HttpContext); } context.Result = GetResult(error); diff --git a/backend/src/Squidex.Web/Pipeline/DefaultExceptionHandler.cs b/backend/src/Squidex.Web/Pipeline/DefaultExceptionHandler.cs index 7ae634fee..6968ec9a0 100644 --- a/backend/src/Squidex.Web/Pipeline/DefaultExceptionHandler.cs +++ b/backend/src/Squidex.Web/Pipeline/DefaultExceptionHandler.cs @@ -6,6 +6,7 @@ // ========================================================================== using System; +using Microsoft.AspNetCore.Http; using Squidex.Infrastructure; using Squidex.Infrastructure.Log; @@ -22,7 +23,7 @@ namespace Squidex.Web.Pipeline this.log = log; } - public void Handle(Exception ex) + public void Handle(Exception ex, HttpContext? httpContext = null) { log.LogError(ex, w => w.WriteProperty("status", "UnhandledException")); } diff --git a/backend/src/Squidex.Web/Pipeline/IExceptionHandler.cs b/backend/src/Squidex.Web/Pipeline/IExceptionHandler.cs index 704768ddc..5f67eda13 100644 --- a/backend/src/Squidex.Web/Pipeline/IExceptionHandler.cs +++ b/backend/src/Squidex.Web/Pipeline/IExceptionHandler.cs @@ -6,11 +6,12 @@ // ========================================================================== using System; +using Microsoft.AspNetCore.Http; namespace Squidex.Web.Pipeline { public interface IExceptionHandler { - void Handle(Exception exception); + void Handle(Exception exception, HttpContext? httpContext = null); } } diff --git a/backend/src/Squidex.Web/Pipeline/RequestExceptionMiddleware.cs b/backend/src/Squidex.Web/Pipeline/RequestExceptionMiddleware.cs index 06dac9cec..fe0d46b89 100644 --- a/backend/src/Squidex.Web/Pipeline/RequestExceptionMiddleware.cs +++ b/backend/src/Squidex.Web/Pipeline/RequestExceptionMiddleware.cs @@ -33,7 +33,7 @@ namespace Squidex.Web.Pipeline } catch (Exception ex) { - exceptionHandler.Handle(ex); + exceptionHandler.Handle(ex, context); context.Response.StatusCode = 500; } diff --git a/backend/src/Squidex/Config/Web/WebExtensions.cs b/backend/src/Squidex/Config/Web/WebExtensions.cs index b9282091c..126979496 100644 --- a/backend/src/Squidex/Config/Web/WebExtensions.cs +++ b/backend/src/Squidex/Config/Web/WebExtensions.cs @@ -35,6 +35,7 @@ namespace Squidex.Config.Web public static IApplicationBuilder UseSquidexTracking(this IApplicationBuilder app) { + app.UseMiddleware(); app.UseMiddleware(); return app; diff --git a/backend/tests/Squidex.Web.Tests/ApiExceptionFilterAttributeTests.cs b/backend/tests/Squidex.Web.Tests/ApiExceptionFilterAttributeTests.cs index 89220f151..c5b97ac33 100644 --- a/backend/tests/Squidex.Web.Tests/ApiExceptionFilterAttributeTests.cs +++ b/backend/tests/Squidex.Web.Tests/ApiExceptionFilterAttributeTests.cs @@ -50,7 +50,7 @@ namespace Squidex.Web Assert.Equal(new[] { "Error1", "P: Error2", "P1, P2: Error3" }, ((ErrorDto)result.Value).Details); - A.CallTo(() => exceptionHandler.Handle(A._)) + A.CallTo(() => exceptionHandler.Handle(A._, A._)) .MustNotHaveHappened(); } @@ -63,7 +63,7 @@ namespace Squidex.Web Assert.IsType(context.Result); - A.CallTo(() => exceptionHandler.Handle(A._)) + A.CallTo(() => exceptionHandler.Handle(A._, A._)) .MustNotHaveHappened(); } @@ -76,7 +76,7 @@ namespace Squidex.Web Validate(500, context.Result, null); - A.CallTo(() => exceptionHandler.Handle(A._)) + A.CallTo(() => exceptionHandler.Handle(context.Exception, A._)) .MustHaveHappened(); } @@ -89,7 +89,7 @@ namespace Squidex.Web Validate(400, context.Result, context.Exception); - A.CallTo(() => exceptionHandler.Handle(A._)) + A.CallTo(() => exceptionHandler.Handle(A._, A._)) .MustNotHaveHappened(); } @@ -102,7 +102,7 @@ namespace Squidex.Web Validate(400, context.Result, context.Exception); - A.CallTo(() => exceptionHandler.Handle(A._)) + A.CallTo(() => exceptionHandler.Handle(A._, A._)) .MustNotHaveHappened(); } @@ -115,7 +115,7 @@ namespace Squidex.Web Validate(412, context.Result, context.Exception); - A.CallTo(() => exceptionHandler.Handle(A._)) + A.CallTo(() => exceptionHandler.Handle(A._, A._)) .MustNotHaveHappened(); } @@ -128,7 +128,7 @@ namespace Squidex.Web Validate(403, context.Result, context.Exception); - A.CallTo(() => exceptionHandler.Handle(A._)) + A.CallTo(() => exceptionHandler.Handle(A._, A._)) .MustNotHaveHappened(); } @@ -141,7 +141,7 @@ namespace Squidex.Web Validate(403, context.Result, null); - A.CallTo(() => exceptionHandler.Handle(A._)) + A.CallTo(() => exceptionHandler.Handle(context.Exception, A._)) .MustHaveHappened(); } @@ -154,7 +154,7 @@ namespace Squidex.Web Validate(403, context.Result, null); - A.CallTo(() => exceptionHandler.Handle(A._)) + A.CallTo(() => exceptionHandler.Handle(A._, A._)) .MustNotHaveHappened(); }