0Pricing
C# Academy · Leçon

Ordre des intergiciels et intergiciels intégrés

Comprenez l’ordre correct des intergiciels pour l’authentification, le routage, CORS et la gestion des exceptions.

Ordre des intergiciels et intergiciels intégrés est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.

Pourquoi l’ordre est important

Les intergiciels ASP.NET Core s’exécutent exactement dans l’ordre de leur enregistrement. Un ordre incorrect provoque des failles de sécurité, des problèmes de performances ou un comportement défaillant ; par exemple, le routage doit précéder l’autorisation, qui doit elle-même précéder l’exécution du point de terminaison.

L’ordre recommandé des intergiciels

Microsoft documente l’ordre recommandé. S’en écarter crée des problèmes difficiles à diagnostiquer. Voici l’ordre de référence pour une API ASP.NET Core en production.

// Recommended order:
app.UseExceptionHandler();    // 1. Catch all exceptions
app.UseHsts();                // 2. HTTP Strict Transport Security
app.UseHttpsRedirection();    // 3. Redirect HTTP to HTTPS
app.UseStaticFiles();         // 4. Serve static assets
app.UseRouting();             // 5. Match route patterns
app.UseCors();                // 6. Cross-Origin
app.UseAuthentication();      // 7. Who are you?
app.UseAuthorization();       // 8. Are you allowed?
app.UseRateLimiter();         // 9. Throttle
app.UseOutputCache();         // 10. Cache responses
// Map endpoints here
app.MapControllers();
app.Run();

La gestion des exceptions en premier

L’intergiciel de gestion des exceptions doit être placé en premier, à l’extérieur de tous les autres, afin d’intercepter les exceptions de tous les intergiciels et points de terminaison suivants.

// Development: detailed error page
if (app.Environment.IsDevelopment())
    app.UseDeveloperExceptionPage();
else
{
    // Production: generic error page + structured response
    app.UseExceptionHandler("/error");
    app.UseHsts();
}

// OR: use ProblemDetails globally (recommended .NET 8+)
builder.Services.AddProblemDetails();
app.UseExceptionHandler();
// All unhandled exceptions -> RFC 7807 ProblemDetails JSON

Les fichiers statiques avant le routage

Les fichiers statiques (UseStaticFiles) doivent être traités avant le routage. Servir un fichier statique interrompt la chaîne de traitement : il est inutile d’exécuter l’authentification ou le routage pour /css/main.css.

app.UseStaticFiles(); // serves wwwroot/* without going through auth
app.UseRouting();     // expensive: runs route matching

// If you put UseStaticFiles AFTER UseRouting, the route
// matcher runs unnecessarily for every .js/.css request.
// Serve static files first for better performance.

L’authentification avant l’autorisation

UseAuthentication doit être appelé avant UseAuthorization. L’authentification renseigne HttpContext.User ; l’autorisation vérifie ensuite cet utilisateur renseigné par rapport aux politiques.

// WRONG ORDER — authorization runs before user is populated:
app.UseAuthorization();  // user is null → everything allowed!
app.UseAuthentication(); // too late

// CORRECT:
app.UseAuthentication(); // populates context.User
app.UseAuthorization();  // checks context.User against policies

CORS avant l’authentification

L’intergiciel CORS doit s’exécuter avant l’authentification afin que les requêtes de pré-vérification OPTIONS soient traitées sans nécessiter d’en-têtes d’authentification.

builder.Services.AddCors(opts =>
    opts.AddPolicy("Frontend", p =>
        p.WithOrigins("https://myapp.com")
         .AllowAnyHeader()
         .AllowAnyMethod()));

app.UseRouting();
app.UseCors("Frontend"); // before auth — handles OPTIONS pre-flight
app.UseAuthentication();
app.UseAuthorization();

Intergiciels intégrés courants

ASP.NET Core fournit de nombreux composants d’intergiciel intégrés. Comprendre le rôle de chacun vous aide à savoir quand et comment les utiliser.

// Compression: compresses responses (must be before static files)
builder.Services.AddResponseCompression();
app.UseResponseCompression();

// Request localization: sets culture from Accept-Language header
builder.Services.AddLocalization();
app.UseRequestLocalization();

// Health checks: /health endpoint
builder.Services.AddHealthChecks();
app.MapHealthChecks("/health");

// Forwarded headers: trust X-Forwarded-For from reverse proxy
app.UseForwardedHeaders();

Analyse approfondie de l’intergiciel de routage

UseRouting() associe la requête entrante à un modèle de route et stocke la correspondance dans HttpContext. UseEndpoints() (ou MapXxx()) exécute ensuite le point de terminaison correspondant.

app.UseRouting(); // matches route, stores in context

// Between UseRouting and Map*: middleware can read route data
app.Use(async (ctx, next) =>
{
    var endpoint = ctx.GetEndpoint();
    var routeName = endpoint?.DisplayName;
    Console.WriteLine($"Matched: {routeName}");
    await next(ctx);
});

// All auth and other middleware go here
app.UseAuthentication();
app.UseAuthorization();

// Execute the matched endpoint
app.MapControllers();
app.MapGet("/", () => "Home");

Positionnement de la compression des réponses

La compression des réponses doit être placée avant les fichiers statiques et le routage afin que la sortie compressée soit écrite avant la génération du contenu. Placez-la immédiatement après la gestion des exceptions.

// Correct placement for response compression:
app.UseExceptionHandler();
app.UseResponseCompression(); // before static files
app.UseStaticFiles();          // compressed static files
app.UseRouting();
// ... rest of pipeline

Cas réel : chaîne de traitement complète pour la production

Une chaîne de traitement complète pour la production qui regroupe toutes les recommandations dans une pile d’intergiciels correctement ordonnée et sécurisée.

var app = builder.Build();

if (app.Environment.IsDevelopment())
    app.UseDeveloperExceptionPage();
else { app.UseExceptionHandler(); app.UseHsts(); }

app.UseResponseCompression();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCors("AllowFrontend");
app.UseAuthentication();
app.UseAuthorization();
app.UseRateLimiter();
app.UseOutputCache();

app.MapHealthChecks("/health").AllowAnonymous();
app.MapControllers();

app.Run();

Vérification rapide

Pourquoi UseAuthentication doit-il être placé avant UseAuthorization dans la chaîne de traitement des intergiciels ?

Récapitulatif : ordre des intergiciels et intergiciels intégrés

Points essentiels :

  • Gestion des exceptions en premier, fichiers statiques avant le routage, authentification avant autorisation, CORS avant authentification
  • La compression des réponses intervient tôt (avant les fichiers statiques) pour une efficacité maximale
  • UseRouting + UseAuthorization + Map* — les intergiciels placés entre eux peuvent lire les données de route
  • Intergiciels intégrés : UseHsts, UseHttpsRedirection, UseStaticFiles, UseRateLimiter, UseOutputCache
  • Vérifiez ctx.GetEndpoint() entre UseRouting et MapXxx pour lire les informations sur la route correspondante

Questions Fréquemment Posées

La leçon « Ordre des intergiciels et intergiciels intégrés » est-elle gratuite ?

Oui — le texte complet de « Ordre des intergiciels et intergiciels intégrés » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Ordre des intergiciels et intergiciels intégrés » ?

Comprenez l’ordre correct des intergiciels pour l’authentification, le routage, CORS et la gestion des exceptions. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C# Academy ?

Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Ordre des intergiciels et intergiciels intégrés » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?

Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Vue d’ensemble de la chaîne ASP.NET Core
  2. Écrire des intergiciels personnalisés
  3. Court-circuitage et branchement
  4. Ordre des intergiciels et intergiciels intégrés
← Retour à C# Academy