using System.Net; using System.Text.Json; namespace Azaion.Flights.Middleware; public class ErrorHandlingMiddleware(RequestDelegate next, ILogger logger) { public async Task Invoke(HttpContext context) { try { await next(context); } catch (KeyNotFoundException ex) { await WriteError(context, HttpStatusCode.NotFound, ex.Message); } catch (ArgumentException ex) { await WriteError(context, HttpStatusCode.BadRequest, ex.Message); } catch (InvalidOperationException ex) { await WriteError(context, HttpStatusCode.Conflict, ex.Message); } catch (Exception ex) { logger.LogError(ex, "Unhandled exception"); await WriteError(context, HttpStatusCode.InternalServerError, "Internal server error"); } } private static async Task WriteError(HttpContext context, HttpStatusCode code, string message) { context.Response.StatusCode = (int)code; context.Response.ContentType = "application/json"; var body = JsonSerializer.Serialize(new { statusCode = (int)code, message }); await context.Response.WriteAsync(body); } }