How it works: Middleware .Net Core

H

Lógica de intercambio de información entre aplicaciones (interlogical), es un software que se sitúa entre un sistema operativo y las aplicaciones que se ejecutan en él. Básicamente, funciona como un intermediario para permitir la transferencia y comunicación de datos en aplicaciones distribuidas (Cliente-Servidor).

Sin embargo, el middleware es usado en diferentes contextos, lo cual puede traer confusión, en este artículo discutiremos la definición en ASP.NET CORE. En este contexto particular los middleware  son clases en c# que nos permiten manejar las solicitudes y respuestas HTTP. Es decir, el middleware es capaz de determinar el flujo de la aplicación, elegir cuando y a cual componente pasar el request, procesar dicha solicitud para generar una respuesta.

El middleware es capaz de realizar las siguientes tareas:

Ejecutar cualquier código
Realizar cambios en la solicitud y objetos de respuesta.
Finalizar el ciclo de request/response
Invocar la siguiente función de middleware en la pila.

Un ejemplo de esto sería, un middleware de registro que una vez ingresado el nombre de usuario, consulte su existencia y traiga la imagen de usuario sin iniciar sesión. Un ejemplo super simple de un middleware es un delegado de solicitudes la cual puede ser representado como una expresión lambda, como la siguiente:

En este caso, si la app solo tiene este middleware el retorno siempre será “Hey Listen”, debido a que no se refiere a la siguiente pieza del middleware, en otras palabras, qué sigue después. Por instancia podría agregarse otro middleware que agregue un header a la respuesta previa.

El orden de ejecucion  en ASP.NET Core consiste en una secuencia de delegados, llamados de forma síncrona, como lo describe el siguiente diagrama:


Nota: Un delegado puede decidir no pasar el request al siguiente delegado, lo cual es llamado un “corto circuito”. Estos cortocircuitos son necesarios porque evitan trabajo innecesario. Para ejemplificar, supongamos que que un usuario intenta loguearse a nuestra aplicación en la cual hemos creado un middleware con varios delegados para manejar estos request.


Usuario unicornio intenta loguearse a la aplicación, sin embargo en lugar de escribir unicornio, escribió Umicornio, el primer delegado válida si el usuario existe, el siguiente si la contraseña es correcta. En lugar de ejecutarse todas las validaciones, lo correcto es que se produzca un corto, pues el nombre de usuario digitado no es correcto, por ende no es necesario validar la contraseña.

Las aplicaciones sencillas solo tienen un delegado que maneja todos los Request. Este caso no se aplica una estructura real de pilas, en su lugar una función anónima es llamada para responder a cada Request HTTP.

El primer delegado Run termina la secuencia.

Puedes encadenar varias solicitudes juntas con Use. El parámetro next representa el siguiente delegado de la secuencia. Puedes hacer un corto-circuito si no usas el parámetro next. Veamos un ejemplo del uso de next.

 

Consideraciones Importantes:

Orden

El orden en que los componentes del middleware son agregados en Startup.Configure, define la secuencia en la que estos serán invocados. El orden es crítico para tres aspectos muy importantes : Seguridad, rendimiento y funcionalidad.

El siguiente Startup.Configure, agrega los componentes habituales de cualquier aplicación común o normal.

  1. Exception/Error handling
  2. Protocolo de Seguridad de Transporte HTTP
  3. Redireccionamiento HTTPS
  4. File Server estático
  5. Política de Cookie
  6. Autenticación
  7. Sesión
  8. MVC
No reinventemos la rueda

ASP.NET Core nos provee los siguientes componentes del middleware. En la columna orden encontraras notas del lugar donde debes ubicar en la secuencia el respectivo componente.

Middleware Descripción Orden
Authentication Provee soporte de autenticación. Antes de HttpContext.User.
Diagnostics Configura diagnóstico Antes de los componentes que generan errores.
MVC Procesa las solicitudes con páginas  MVC/Razor(ASP.NET Core 2.0 o superior) Terminal si una solicitud coincide con una ruta.
Response Cashing Provee soporte de almacenamiento de caché. Debe usarse antes de los componentes que requieren almacenamiento en caché.
Routing Define y restringe las rutas de solicitudes. Terminal para emparejar rutas.
Static Files Provee soporte para servicio de archivos estáticos. Terminal si una solicitud coincide con un archivo.
Conclusiones
  • El middleware es un puente de conexión entre nuestras aplicaciones que tiene distintas aplicaciones.
  • El middleware es capaz de ejecutar código.
  • Finalizar el ciclo de un request.
  • En Asp.Net Core tenemos a nuestra disposición multiples componentes de middleware, para que lo usemos a nuestra conveniencia. Este es link de la Doc de microsoft

 

Acerca del Autor

leslie.ramirez

Soy estudiante Ing. De tecnología de la Información y comunicación, tecnólogo superior en Desarrollo de Software. Me considero una persona innovadora y creativa, disfruto aprender cosas nuevas y desarrollar aplicaciones.

Entradas recientes

Categorías