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

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.

What’s a Rich Text element?

The rich text element allows you to create and format headings, paragraphs, blockquotes, images, and video all in one place instead of having to add and format them individually. Just double-click and easily create content.

Static and dynamic content editing

A rich text element can be used with static or dynamic content. For static content, just drop it into any page and begin editing. For dynamic content, add a rich text field to any collection and then connect a rich text element to that field in the settings panel. Voila!

How to customize formatting for each rich text

Headings, paragraphs, blockquotes, figures, images, and figure captions can all be styled after a class is added to the rich text element using the "When inside of" nested selector system.

Descarga nuestro Clever UI KIT 👇

Acá en Clever Experience trabajamos en un pequeño UI KIT que puede ayudarte en la próxima propuesta rápida, idea o proyecto que debas o quieras desarrollar.
Ingresa tu nombre y correo para descargar.

Gracias. Te será enviado un mail confirmando la inscripción
¡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!