Browse Source

More improvements for exceptions.

pull/492/head
Sebastian 6 years ago
parent
commit
9dfc40a76a
  1. 2
      backend/src/Squidex.Web/ApiExceptionFilterAttribute.cs
  2. 3
      backend/src/Squidex.Web/Pipeline/DefaultExceptionHandler.cs
  3. 3
      backend/src/Squidex.Web/Pipeline/IExceptionHandler.cs
  4. 2
      backend/src/Squidex.Web/Pipeline/RequestExceptionMiddleware.cs
  5. 1
      backend/src/Squidex/Config/Web/WebExtensions.cs
  6. 18
      backend/tests/Squidex.Web.Tests/ApiExceptionFilterAttributeTests.cs

2
backend/src/Squidex.Web/ApiExceptionFilterAttribute.cs

@ -35,7 +35,7 @@ namespace Squidex.Web
{ {
var exceptionHandler = context.HttpContext.RequestServices.GetService<IExceptionHandler>(); var exceptionHandler = context.HttpContext.RequestServices.GetService<IExceptionHandler>();
exceptionHandler?.Handle(context.Exception); exceptionHandler.Handle(context.Exception, context.HttpContext);
} }
context.Result = GetResult(error); context.Result = GetResult(error);

3
backend/src/Squidex.Web/Pipeline/DefaultExceptionHandler.cs

@ -6,6 +6,7 @@
// ========================================================================== // ==========================================================================
using System; using System;
using Microsoft.AspNetCore.Http;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Log; using Squidex.Infrastructure.Log;
@ -22,7 +23,7 @@ namespace Squidex.Web.Pipeline
this.log = log; this.log = log;
} }
public void Handle(Exception ex) public void Handle(Exception ex, HttpContext? httpContext = null)
{ {
log.LogError(ex, w => w.WriteProperty("status", "UnhandledException")); log.LogError(ex, w => w.WriteProperty("status", "UnhandledException"));
} }

3
backend/src/Squidex.Web/Pipeline/IExceptionHandler.cs

@ -6,11 +6,12 @@
// ========================================================================== // ==========================================================================
using System; using System;
using Microsoft.AspNetCore.Http;
namespace Squidex.Web.Pipeline namespace Squidex.Web.Pipeline
{ {
public interface IExceptionHandler public interface IExceptionHandler
{ {
void Handle(Exception exception); void Handle(Exception exception, HttpContext? httpContext = null);
} }
} }

2
backend/src/Squidex.Web/Pipeline/RequestExceptionMiddleware.cs

@ -33,7 +33,7 @@ namespace Squidex.Web.Pipeline
} }
catch (Exception ex) catch (Exception ex)
{ {
exceptionHandler.Handle(ex); exceptionHandler.Handle(ex, context);
context.Response.StatusCode = 500; context.Response.StatusCode = 500;
} }

1
backend/src/Squidex/Config/Web/WebExtensions.cs

@ -35,6 +35,7 @@ namespace Squidex.Config.Web
public static IApplicationBuilder UseSquidexTracking(this IApplicationBuilder app) public static IApplicationBuilder UseSquidexTracking(this IApplicationBuilder app)
{ {
app.UseMiddleware<RequestExceptionMiddleware>();
app.UseMiddleware<RequestLogPerformanceMiddleware>(); app.UseMiddleware<RequestLogPerformanceMiddleware>();
return app; return app;

18
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); Assert.Equal(new[] { "Error1", "P: Error2", "P1, P2: Error3" }, ((ErrorDto)result.Value).Details);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._)) A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened(); .MustNotHaveHappened();
} }
@ -63,7 +63,7 @@ namespace Squidex.Web
Assert.IsType<NotFoundResult>(context.Result); Assert.IsType<NotFoundResult>(context.Result);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._)) A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened(); .MustNotHaveHappened();
} }
@ -76,7 +76,7 @@ namespace Squidex.Web
Validate(500, context.Result, null); Validate(500, context.Result, null);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._)) A.CallTo(() => exceptionHandler.Handle(context.Exception, A<HttpContext>._))
.MustHaveHappened(); .MustHaveHappened();
} }
@ -89,7 +89,7 @@ namespace Squidex.Web
Validate(400, context.Result, context.Exception); Validate(400, context.Result, context.Exception);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._)) A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened(); .MustNotHaveHappened();
} }
@ -102,7 +102,7 @@ namespace Squidex.Web
Validate(400, context.Result, context.Exception); Validate(400, context.Result, context.Exception);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._)) A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened(); .MustNotHaveHappened();
} }
@ -115,7 +115,7 @@ namespace Squidex.Web
Validate(412, context.Result, context.Exception); Validate(412, context.Result, context.Exception);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._)) A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened(); .MustNotHaveHappened();
} }
@ -128,7 +128,7 @@ namespace Squidex.Web
Validate(403, context.Result, context.Exception); Validate(403, context.Result, context.Exception);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._)) A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened(); .MustNotHaveHappened();
} }
@ -141,7 +141,7 @@ namespace Squidex.Web
Validate(403, context.Result, null); Validate(403, context.Result, null);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._)) A.CallTo(() => exceptionHandler.Handle(context.Exception, A<HttpContext>._))
.MustHaveHappened(); .MustHaveHappened();
} }
@ -154,7 +154,7 @@ namespace Squidex.Web
Validate(403, context.Result, null); Validate(403, context.Result, null);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._)) A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened(); .MustNotHaveHappened();
} }

Loading…
Cancel
Save