Première étape, télécharger le Dotnet 8.0 SDK https://dotnet.microsoft.com/en-us/download/dotnet/8.0
Lorsque l’on crĂ©e une Api ASPNet Core, en utilisant le template standard, voilĂ ce que l’on obtient :
var builder = WebApplication.CreateBuilder(args) ;
// Add services to the container.
builder. Services .AddControllers);
// Learn more about configuring Swagger/OpenAPI at https: //aka.ms/aspnetcore/swashbuckle
builder. Services .AddEndpointsApiExplorer);
builder. Services .AddSwaggerGen();
var app = builder. Build);
// Configure the HTTP request pipeline.
if (app. Environment. IsDevelopment ())
{
app. UseSwagger;
app. UseSwaggerUI();
}
app. UseHttpsRedirection();
app. UseAuthorization;
app. MapControllers) ;
app. Run ();
Pour faire simple la partie builder se charge de l’injection de dĂ©pendance, et le app.X se charge de crĂ©er les middleware dans la pipeline. Attention l’ordre a son importance.
petit rappel de l’exĂ©cution de la pipeline, les middleware s’exĂ©cutent dans l’ordre de leur dĂ©claration “App.UseX” :

Pour notre exemple je vais ajouter une route “DummyRoute” ainsi qu’un middleware pour illustrer l’exĂ©cution de base.
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.UseMiddleware<DummyMiddleware>();
app.MapGet("DummyRoute", () =>
{
Console.WriteLine("DummyRoute is triggered");
Results.Ok();
})
app.Run();
Le Middleware quand a lui, ne fera qu’Ă©crire une ligne dans la console :
public class DummyMiddleware
{
private readonly RequestDelegate _next;
public DummyMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
Console.WriteLine(context.Request.Path);
Console.WriteLine("Then Dummy Middleware is invoked");
await _next(context);
}
}
Des lors qu’on lance notre Api et qu’on trigger la route : https://localhost:5102/DummyRoute on voit bien que le Middleware est invoquĂ©. “The Dummy Middleware is invoked”

Comment bypasser, les midlware ? il suffit de modifier le MapGet de la sorte en ajoutant ShortCircuit() :
app.MapGet("DummyRoute", () =>
{
Console.WriteLine("DummyRoute is triggered");
Results.Ok();
}).ShortCircuit();
Maintenant appelons la route /WeatherForecast :
On constate bien que le middleware est invoqué.

Appelons la route /DummyRoute

On constate une entrĂ©e dans la console “Dummy Route is triggerd”, mais aucune invocation du middleware, ce qui montre bien que l’on bypass bien la pipeline. Chez vous, il suffit d’ajouter un breakpoint dans le middleware et voir que ca break ou non en fonction de la route que vous appelez.
En Conclusion
Bypasser la middleware pipeline peut s’avĂ©rer très utile pour des questions de performance. En gĂ©nĂ©ral ca va s’appliquer a des use cases ou l’on a pas besoin de traverser celle-ci. Par exemple une route de type “HealthCheck”’. On peut aussi configurer le bypass de manière globale, si votre API sert des fichiers static 404.html, favicon.ico, sitemap.xml ou encore robot.txt voir l’examle ci-dessous.
App.MapShortCircuit("favicon.ico", "robot.txt", "sitemap.xml", 404,"404.html");
Le code sample est disponible sur mon compte GitHub
