mirror of
https://github.com/azaion/flights.git
synced 2026-04-22 05:26:32 +00:00
0625cd4157
Made-with: Cursor
41 lines
1.3 KiB
C#
41 lines
1.3 KiB
C#
using System.Net;
|
|
using System.Text.Json;
|
|
|
|
namespace Azaion.Flights.Middleware;
|
|
|
|
public class ErrorHandlingMiddleware(RequestDelegate next, ILogger<ErrorHandlingMiddleware> 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);
|
|
}
|
|
}
|