Development

Automatización de tareas mediante el uso de middleware en .NET Core

Publicado por
Mauricio Sagredo
Automatización de tareas mediante el uso de middleware en .NET Core
Escrito por
Mauricio Sagredo
Publicado en
February 27, 2024
Tiempo de lectura
Categoría
Development

Hace un tiempo, un cliente solicitó un requerimiento que trataba de “loguear” todas las solicitudes que reciba y todas las respuestas que emita un microservicio. Una manera simple de resolverlo dentro del framework net core, es utilzando un middleware (intercambio de información entre aplicaciones) personalizado porque permite abstraer y automatizar la funcionalidad.

¿Que es un middleware en un microservicio netcore? Es la secuencia de tareas (pipeline) que se ejecutan para procesar las solicitudes antes que estas lleguen al controlador”.

Ejemplos:

dotnet new webapi -o custom-middleware

controllers

Ejemplo de creación del middleware


   public class RequestLogMiddleware : IMiddleware
   {
       public async Task InvokeAsync(HttpContext context, RequestDelegate next)
       {
           context.Request.EnableBuffering();

           using (var stream = new StreamReader(context.Request.Body))
           {
               string body = await stream.ReadToEndAsync();

               System.Console.WriteLine(context.Request.Method);
System.Console.WriteLine($"{context.Request.Scheme}/{context.Request.Host}{context.Request.Path}{context.Request.QueryString}");
               System.Console.WriteLine(body);

               context.Request.Body.Position = 0;
           }

           await next(context);
       }
   }


La clase de ejemplo “RequestLogMiddleware” implementa la interfaz IMiddleware donde se debe implementar la firma


  Task InvokeAsync(HttpContext context, RequestDelegate next)


El middleware recibe por parámetro el request (context), desde donde se leen los atributos que se interesa loguear. Para el ejemplo se ha mantenido simple con WriteLine(), pero en el caso real, el log era enviado a un servicio externo. Es importante utilizar EnableBuffering() para restablecer el índice del buffer y permitir la posterior lectura del body.

El middleware debe ser configurado para su uso.



builder.Services.AddTransient < RequestLogMiddleware >();

var app = builder.Build();

app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
   appBuilder.UseMiddleware <RequestLogMiddleware >();
});



La configuración consiste en registrarlo como servicio en el contenedor de servicios de netcore y luego indicar que utilizará con la instrucción UseMiddleware(). Se utiliza la condición “StartsWithSegments("/api")” para filtrar solicitudes donde se desea utilizar el middleware.

El resultado tras la invocación de un post

Post code

Utilizar middleware permite que los desarrolladores conviertan las aplicaciones monolíticas heredadas en aplicaciones nativas, lo cual mantiene activas las herramientas importantes con un rendimiento mejorado.

Descarga nuestro Clever UI KIT 👇

Gracias. Te será enviado un mail confirmando la inscripción
¡Ups! Algo salió mal al enviar el formulario.
Gracias. Por rellenar el formulario
¡Ups! Algo salió mal al enviar el formulario.
Gracias. Te será enviado un mail confirmando la inscripción
¡Ups! Algo salió mal al enviar el formulario.
Gracias. Te será enviado un mail confirmando la inscripción
¡Ups! Algo salió mal al enviar el formulario.
Gracias. Por rellenar el formulario
¡Ups! Algo salió mal al enviar el formulario.
Gracias. Por rellenar el formulario
¡Ups! Algo salió mal al enviar el formulario.

Crea tu propio manual de marca con esta plantilla gratuita.
¡Organiza tus activos de diseño de forma más eficiente!