using AutoMapper; using Diligent.WebAPI.Host.Exceptions; using System.Net; namespace Diligent.WebAPI.Host.Middlewares { public class ExceptionHandlingMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; public ExceptionHandlingMiddleware(RequestDelegate next, ILogger logger) { _next = next; _logger = logger; } public async Task InvokeAsync(HttpContext httpContext) { try { await _next(httpContext); } catch (Exception ex) { await HandleExceptionAsync(httpContext, ex); } } private async Task HandleExceptionAsync(HttpContext context, Exception ex) { context.Response.ContentType = "application/json"; context.Response.StatusCode = ex switch { NotFoundException => (int)HttpStatusCode.NotFound, KeyNotFoundException => (int)HttpStatusCode.NotFound, BadHttpRequestException => (int)HttpStatusCode.BadRequest, //... _ => (int)HttpStatusCode.InternalServerError }; _logger.LogError(ex.Message); await context.Response.WriteAsync(new ErrorDetails() { StatusCode = context.Response.StatusCode, Message = ex.Message }.ToString()); } } }