using CleanArchitecture.API.Errors; using System.Net; using System.Text.Json; namespace CleanArchitecture.API.Middlewares { public class ExceptionMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; private readonly IWebHostEnvironment _env; public ExceptionMiddleware(RequestDelegate next, ILogger logger, IWebHostEnvironment env) { _next = next; _logger = logger; _env = env; } public async Task InvokeAsync(HttpContext context) { try { await _next(context); } catch (Exception ex) { _logger.LogError(ex, ex.Message); context.Response.ContentType = "application/json"; context.Response.StatusCode = StatusCodes.Status500InternalServerError; var response = _env.IsDevelopment() ? new CodeErrorException((int)HttpStatusCode.InternalServerError, ex.Message, ex.StackTrace) : new CodeErrorException((int)HttpStatusCode.InternalServerError); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; var json = JsonSerializer.Serialize(response, options); await context.Response.WriteAsync(json); } } } }