From 49809357634c2cd9c73730fddb061a5e83c43f06 Mon Sep 17 00:00:00 2001 From: Alejandro Sarmiento Date: Tue, 20 Feb 2024 01:27:18 +0100 Subject: [PATCH] Exception middleware ya esta bien implementado --- .../Middlewares/ExceptionMiddleware.cs | 34 ++++++++++++++----- .../Exceptions/BadRequestException.cs | 11 ++++++ 2 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 CleanArchitecture/CleanArchitecture.Application/Exceptions/BadRequestException.cs diff --git a/CleanArchitecture/CleanArchitecture.API/Middlewares/ExceptionMiddleware.cs b/CleanArchitecture/CleanArchitecture.API/Middlewares/ExceptionMiddleware.cs index 75a6327..1b50462 100644 --- a/CleanArchitecture/CleanArchitecture.API/Middlewares/ExceptionMiddleware.cs +++ b/CleanArchitecture/CleanArchitecture.API/Middlewares/ExceptionMiddleware.cs @@ -1,5 +1,5 @@ using CleanArchitecture.API.Errors; -using System.Net; +using CleanArchitecture.Application.Exceptions; using System.Text.Json; namespace CleanArchitecture.API.Middlewares @@ -27,16 +27,34 @@ namespace CleanArchitecture.API.Middlewares { _logger.LogError(ex, ex.Message); context.Response.ContentType = "application/json"; - context.Response.StatusCode = StatusCodes.Status500InternalServerError; + var statusCode = StatusCodes.Status500InternalServerError; + var result = string.Empty; - var response = _env.IsDevelopment() ? - new CodeErrorException((int)HttpStatusCode.InternalServerError, ex.Message, ex.StackTrace) - : new CodeErrorException((int)HttpStatusCode.InternalServerError); + switch (ex) + { + case NotFoundException notFoundException: + statusCode = StatusCodes.Status404NotFound; + break; + case ValidationException validationException: + statusCode = StatusCodes.Status400BadRequest; + var validationJson = JsonSerializer.Serialize(validationException.Errors); + result = JsonSerializer.Serialize(new CodeErrorException(statusCode, ex.Message, validationJson)); + break; + case BadRequestException badRequestException: + statusCode = StatusCodes.Status400BadRequest; + break; + default: + break; + } - var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; - var json = JsonSerializer.Serialize(response, options); + if(string.IsNullOrEmpty(result)) + { + result = JsonSerializer.Serialize(new CodeErrorException(statusCode, ex.Message, ex.StackTrace)); + } - await context.Response.WriteAsync(json); + context.Response.StatusCode = statusCode; + + await context.Response.WriteAsync(result); } } diff --git a/CleanArchitecture/CleanArchitecture.Application/Exceptions/BadRequestException.cs b/CleanArchitecture/CleanArchitecture.Application/Exceptions/BadRequestException.cs new file mode 100644 index 0000000..347362a --- /dev/null +++ b/CleanArchitecture/CleanArchitecture.Application/Exceptions/BadRequestException.cs @@ -0,0 +1,11 @@ + +namespace CleanArchitecture.Application.Exceptions +{ + public class BadRequestException: ApplicationException + { + public BadRequestException(string message): base(message) + { + + } + } +}