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>();
exceptionHandler?.Handle(context.Exception);
exceptionHandler.Handle(context.Exception, context.HttpContext);
}
context.Result = GetResult(error);

3
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"));
}

3
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);
}
}

2
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;
}

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

@ -35,6 +35,7 @@ namespace Squidex.Config.Web
public static IApplicationBuilder UseSquidexTracking(this IApplicationBuilder app)
{
app.UseMiddleware<RequestExceptionMiddleware>();
app.UseMiddleware<RequestLogPerformanceMiddleware>();
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);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._))
A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened();
}
@ -63,7 +63,7 @@ namespace Squidex.Web
Assert.IsType<NotFoundResult>(context.Result);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._))
A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened();
}
@ -76,7 +76,7 @@ namespace Squidex.Web
Validate(500, context.Result, null);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._))
A.CallTo(() => exceptionHandler.Handle(context.Exception, A<HttpContext>._))
.MustHaveHappened();
}
@ -89,7 +89,7 @@ namespace Squidex.Web
Validate(400, context.Result, context.Exception);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._))
A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened();
}
@ -102,7 +102,7 @@ namespace Squidex.Web
Validate(400, context.Result, context.Exception);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._))
A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened();
}
@ -115,7 +115,7 @@ namespace Squidex.Web
Validate(412, context.Result, context.Exception);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._))
A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened();
}
@ -128,7 +128,7 @@ namespace Squidex.Web
Validate(403, context.Result, context.Exception);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._))
A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened();
}
@ -141,7 +141,7 @@ namespace Squidex.Web
Validate(403, context.Result, null);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._))
A.CallTo(() => exceptionHandler.Handle(context.Exception, A<HttpContext>._))
.MustHaveHappened();
}
@ -154,7 +154,7 @@ namespace Squidex.Web
Validate(403, context.Result, null);
A.CallTo(() => exceptionHandler.Handle(A<Exception>._))
A.CallTo(() => exceptionHandler.Handle(A<Exception>._, A<HttpContext>._))
.MustNotHaveHappened();
}

Loading…
Cancel
Save