Add Exception middleware

This commit is contained in:
2022-09-01 23:02:49 +01:00
parent 2ac5937096
commit dcf3b1020a
14 changed files with 241 additions and 90 deletions

View File

@@ -0,0 +1,60 @@

namespace Diary.Shared
{
public partial class ExceptionHandlingMiddleware : IMiddleware
{
private readonly ILogger<ExceptionHandlingMiddleware> _logger;
public ExceptionHandlingMiddleware(ILogger<ExceptionHandlingMiddleware> logger)
{
_logger = logger;
}
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
try
{
await next(context);
}
catch (Exception e)
{
_logger.LogError(e, "Error received from ExceptionHandlingMiddleware");
await HandleExceptionAsync(context, e);
}
}
private static async Task HandleExceptionAsync(HttpContext httpContext, Exception exception)
{
ExceptionDetails exceptionDetails;
httpContext.Response.ContentType = "application/json";
if (exception.InnerException is AppException)
{
exception = exception.InnerException;
}
if (exception is AppException applicationException)
{
httpContext.Response.StatusCode = (int)applicationException.StatusCode;
exceptionDetails = new()
{
Message = applicationException.Message,
Title = applicationException.Title
};
}
else
{
httpContext.Response.StatusCode = 500;
exceptionDetails = new()
{
Message = exception.Message,
Title = "API Error"
};
}
await httpContext.Response.WriteAsync(exceptionDetails.ToString());
}
}
}