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.

attach icon
Adjuntar archivo
máximo: 10MB
Descarga el archivo haciendo click en el botón
Click aquí
¡Ups! Algo salió mal al enviar el formulario.

Download it for FREE here! 🇺🇸

Enter your details in the following form and get the full report.
attach icon
Adjuntar archivo
máximo: 10MB
Download the file by clicking the button
Click here
Oops! Something went wrong while submitting the form.

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

Es
Eng