| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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<ExceptionHandlingMiddleware> _logger;
-
- public ExceptionHandlingMiddleware(RequestDelegate next, ILogger<ExceptionHandlingMiddleware> 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());
- }
- }
- }
|