using Core.Enumerations; using ExtensionMethods; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System.Net; namespace Core.Middlewares { /// /// https://jasonwatmore.com/post/2022/01/17/net-6-global-error-handler-tutorial-with-example /// public class ErrorHandlerMiddleware { private readonly ILogger _logger; private readonly RequestDelegate _next; public ErrorHandlerMiddleware( ILogger logger, RequestDelegate next) { _logger = logger; _next = next; } public async Task Invoke(HttpContext context) { try { await _next(context); } catch (Exception ex) { _logger.LogError(ex, "Unhandled error"); var response = context.Response; response.ContentType = "application/json"; response.StatusCode = (int)HttpStatusCode.InternalServerError; await response.WriteAsync(new ProblemDetails { Title = Errors.Generic.Name, Detail = $"{Errors.Generic.Id}" }.ToJson()); } } } }