En este artÃculo aprenderemos como manejar los errores en nuestras aplicaciones de .Net usando un Middleware personalizado.
Si no sabes que es un middleware aquà te dejo la definición y explicación como se implementan en. Net ASP.NET Core Middleware.
En resumen, podrÃa decirse que un middleware es un fragmento de código que se inserta en la canalización de procesamiento de solicitudes, para procesar solicitudes entrantes y respuestas salientes antes de que lleguen a su destino final.
Con los middlewares podemos realizar diferentes tareas como autenticación, autorización, etc.
Pero en este ejemplo nos veremos como usarlo para el manejo de errores
Lo primero que haremos será crearnos un nuevo proyecto web API (puede usarse en cualquier tipo de proyecto no tiene que ser web API)
En mi caso lo crearé con el Visual Studio 2022 y le llamaré MiddlewareError
En un enpoint sencillo, pero que nos servirá para este ejemplo, lo único que hace este endpoint es recibir 2 números y hace la división de estos números y luego retorna la respuesta
Pero que pasa si tratas de hacer una división entre 0, esto te genera un excepción que de momento no se está controlando y te retorna un status code 500 con la excepción
Por lo general lo que harÃamos para resolver este tipo de problemas serÃa envolver nuestro código dentro de un try catch para poder controlar este tipo de excepciones
De esta manera cualquier excepción no controlada en nuestro código entrarÃa al catch y podrÃamos controlar el tipo de retorno.
El problema de esto(y lo común que hacemos) es que en cada enpoint debemos ir colocando el try catch, ahà es donde entra en juego el middleware nos permite tener centralizado el manejo de excepciones.
namespace MiddlewareError.Middlewares
{
public class ExceptionHandlingMiddleware
{
private readonly RequestDelegate _next;
public ExceptionHandlingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext httpContext)
{
try
{
await _next(httpContext);
}
catch (Exception ex)
{
await HandleExceptionAsync(httpContext, ex);
}
}
private async Task HandleExceptionAsync(HttpContext context, Exception exception)
{
context.Response.ContentType = "application/json";
var response = context.Response;
var errorResponse = new ErrorResponseDTO();
response.StatusCode = (int)HttpStatusCode.InternalServerError;
errorResponse.Message = exception.Message;
var result = JsonSerializer.Serialize(errorResponse);
await context.Response.WriteAsync(result);
}
}
}
public class ErrorResponseDTO
{
public string Message { get; set; }
}
Con nuestro middleware implementado ya no necesitamos poner el try catch en ninguno de nuestro endpoints, si hay alguna excepción nuestro middleware se encargará de gestionar la respuesta.
0 Comentarios