Skip to content

Middlewares

Un Middleware es un software que se ensambla en el pipeline de la aplicaciones para manejar solicitudes y respuestas. Cada componente:

  • Elige si pasar la solicitud al siguiente componente en el pipeline.

  • Puede realizar trabajos antes y después del siguiente componente en el pipeline.

ASP.NET Core permite agregar middlewares al pipeline de la siguiente manera:

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Use(async (context, next) =>
        {
            // Do work that doesn't write to the Response.
            await next.Invoke();
            // Do logging or other work that doesn't write to the Response.
        });

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from 2nd delegate.");
        });
    }
}

Agregar un middleware a una API Platform

En una aplicacion del tipo API desarrollada con Platform, el metodo Configure que nos permite agregar middlewares al pipeline es manejado internamente y no esta expuesto libremente para el agregado de middlewares como en una aplicacion ASP.NET Core sin Platform. Esto no quiere decir que Platform no cuente con un mecanismo para poder agregar un middlware o varios si es que lo necesitamos.

Extendiendo el Startup con startup filters

Los IStartupFilter son utilizados:

  • Para configurar el middleware al principio o al final del pipeline de una aplicación sin una llamada explícita al Use{Middleware}. IStartupFilter permite que diferentes componentes llamen al Use{Middleware} en nombre del autor de la aplicación.

  • Para crear un pipeline de metodos Configure. IStartupFilter.Configure puede configurar un middleware para que se ejecute antes o después del middleware agregado por las librerias.

Agregados de Middlewares utilizando IStartupFilter.

Para poder agregar un middleware utilizando IStartipFilter debemos crear una clase que implemente la interfaz y registre el middleware queremos incorporar al pipeline de la aplicacion, ej: CORS.

public class StartupFilter : IStartupFilter
{
  public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
  {
    return builder =>
    {
      builder.UseCors(p => p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
      next(builder);
    };
  }
}

Luego de esto debemos registrar este componente en el Startup como Transient, para que al iniciar la aplicacion el host de ASP.NET Core ejecute el metodo Configure del mismo y se pueda agregar el middleware.

  public class Startup : IHostingStartup
  {
    // This method gets called by the runtime. Use this method to add services to the container.
    public void Configure(IWebHostBuilder builder)
    {
      builder.ConfigureServices((ctx, c) =>
      {
        c.AddCors();
        c.AddTransient<IStartupFilter, StartupFilter>();
      });
    }
  }