| using System.Net; |
| using System.Text.Json; |
| using AiDevProject.Core.Exceptions; |
|
|
| namespace AiDevProject.Api.Middleware; |
|
|
| |
| |
| |
| public class ErrorHandlingMiddleware |
| { |
| private readonly RequestDelegate _next; |
| private readonly ILogger<ErrorHandlingMiddleware> _logger; |
|
|
| public ErrorHandlingMiddleware(RequestDelegate next, ILogger<ErrorHandlingMiddleware> logger) |
| { |
| _next = next; |
| _logger = logger; |
| } |
|
|
| public async Task InvokeAsync(HttpContext context) |
| { |
| try |
| { |
| await _next(context); |
| } |
| catch (AppException ex) when (ex.IsOperational) |
| { |
| _logger.LogWarning("Operational error: {Message}", ex.Message); |
| await HandleExceptionAsync(context, ex.StatusCode, ex.Message); |
| } |
| catch (Exception ex) |
| { |
| _logger.LogError(ex, "Unexpected error: {Message}", ex.Message); |
| await HandleExceptionAsync(context, 500, "Internal server error"); |
| } |
| } |
|
|
| private static async Task HandleExceptionAsync(HttpContext context, int statusCode, string message) |
| { |
| context.Response.StatusCode = statusCode; |
| context.Response.ContentType = "application/json"; |
|
|
| var response = new { status = "error", message }; |
| await context.Response.WriteAsync(JsonSerializer.Serialize(response)); |
| } |
| } |
|
|