jtr/DevDisciples.Json.Tools.API/GlobalExceptionHandler.cs
2024-09-15 22:25:14 +02:00

46 lines
1.2 KiB
C#

using DevDisciples.Parsing;
using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Mvc;
namespace DevDisciples.Json.Tools.API;
public class GlobalExceptionHandler : IExceptionHandler
{
public const int ParsingExceptionStatusCode = 499;
private readonly ILogger<GlobalExceptionHandler> _logger;
public GlobalExceptionHandler(ILogger<GlobalExceptionHandler> logger)
{
_logger = logger;
}
public async ValueTask<bool> TryHandleAsync(
HttpContext httpContext,
Exception exception,
CancellationToken cancellationToken
)
{
switch (exception)
{
case ParsingException:
_logger.LogError(exception, "An exception occurred: {Message}", exception.Message);
var problem = new ProblemDetails
{
Status = ParsingExceptionStatusCode,
Title = "Parsing Exception",
Detail = exception.Message
};
httpContext.Response.StatusCode = problem.Status.Value;
await httpContext.Response.WriteAsJsonAsync(problem, cancellationToken);
return true;
default:
return false;
}
}
}