using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using System.Net; using System.Text.Json; namespace MotoresArgentinosV2.API.Middleware; public class ExceptionHandlingMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; private readonly IHostEnvironment _env; public ExceptionHandlingMiddleware(RequestDelegate next, ILogger logger, IHostEnvironment env) { _next = next; _logger = logger; _env = env; } public async Task InvokeAsync(HttpContext context) { try { await _next(context); } catch (Exception ex) { await HandleExceptionAsync(context, ex); } } private async Task HandleExceptionAsync(HttpContext context, Exception exception) { // Loguear el error real con stack trace completo _logger.LogError(exception, "Error no controlado procesando la solicitud: {Method} {Path}", context.Request.Method, context.Request.Path); context.Response.ContentType = "application/json"; context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; var response = new { status = context.Response.StatusCode, message = "Ocurrió un error interno en el servidor. Por favor, intente nuevamente más tarde.", // En desarrollo mostramos el detalle, en producción ocultamos todo detail = _env.IsDevelopment() ? exception.Message : null }; var json = JsonSerializer.Serialize(response); await context.Response.WriteAsync(json); } }