using Jtr.Parsing; using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Mvc; namespace Jtr.Tools.API; public class GlobalExceptionHandler : IExceptionHandler { public const int ParsingExceptionStatusCode = 499; private readonly ILogger _logger; public GlobalExceptionHandler(ILogger logger) { _logger = logger; } public async ValueTask TryHandleAsync( HttpContext httpContext, Exception exception, CancellationToken cancellationToken ) { switch (exception) { case SyntaxException: _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; } } }