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 alUse{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>();
});
}
}