C# Academy · Les

Volgorde van middleware en ingebouwde middleware

Krijg inzicht in de juiste volgorde van middleware voor authenticatie, routing, CORS en exception handling.

Les 4 van 412 stappen

Volgorde van middleware en ingebouwde middleware is een gratis C# Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C# Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C# Academy bevat in totaal 4 lessen.

Waarom de volgorde belangrijk is

ASP.NET Core-middleware wordt uitgevoerd in exact de volgorde waarin deze is geregistreerd. Een verkeerde volgorde veroorzaakt beveiligingslekken, prestatieproblemen of defect gedrag — zo moet routering vóór autorisatie komen en autorisatie vóór de uitvoering van eindpunten.

De aanbevolen volgorde van middleware

Microsoft beschrijft de aanbevolen volgorde. Afwijken daarvan veroorzaakt moeilijk te debuggen problemen. Dit is de voorgeschreven volgorde voor een ASP.NET Core-API in productie.

// 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();

Foutafhandeling eerst

Middleware voor foutafhandeling moet als eerste, als buitenste laag, worden geregistreerd, zodat deze uitzonderingen uit alle volgende middleware en eindpunten opvangt.

// 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

Statische bestanden vóór routering

Statische bestanden (UseStaticFiles) moeten vóór routering komen. Het aanbieden van een statisch bestand kortsluit de pijplijn — voor /css/main.css hoeven authenticatie en routering niet te worden uitgevoerd.

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.

Authenticatie vóór autorisatie

UseAuthentication moet vóór UseAuthorization komen. Authenticatie vult HttpContext.User; autorisatie controleert die ingevulde gebruiker aan de hand van beleidsregels.

// 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 vóór authenticatie

CORS-middleware moet vóór authenticatie worden uitgevoerd, zodat preflight-OPTIONS-aanvragen worden afgehandeld zonder dat authenticatiekopteksten nodig zijn.

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();

Veelgebruikte ingebouwde middleware

ASP.NET Core bevat veel ingebouwde middlewarecomponenten. Als je weet wat elk onderdeel doet, begrijp je beter wanneer en hoe je ze gebruikt.

// 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();

Diepgaande uitleg van routeringsmiddleware

UseRouting() koppelt de binnenkomende aanvraag aan een routepatroon en slaat de overeenkomst op in HttpContext. UseEndpoints() (of MapXxx()) voert vervolgens het overeenkomende eindpunt uit.

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");

Plaatsing van antwoordcompressie

Antwoordcompressie moet vóór statische bestanden en routering komen, zodat gecomprimeerde uitvoer wordt geschreven voordat inhoud wordt gegenereerd. Plaats deze direct na de foutafhandeling.

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

Uit de praktijk: volledige productie-pijplijn

Een volledige productie-pijplijn waarin alle aanbevelingen worden gecombineerd tot een goed geordende, veilige middlewarestack.

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();

Korte controle

Waarom moet UseAuthentication vóór UseAuthorization in de middlewarepijplijn komen?

Samenvatting: volgorde van middleware en ingebouwde middleware

Belangrijkste punten:

  • Eerst foutafhandeling, statische bestanden vóór routering, authenticatie vóór autorisatie en CORS vóór authenticatie
  • Antwoordcompressie komt vroeg (vóór statische bestanden) voor maximaal effect
  • UseRouting + UseAuthorization + Map* — middleware ertussen kan routegegevens lezen
  • Ingebouwd: UseHsts, UseHttpsRedirection, UseStaticFiles, UseRateLimiter, UseOutputCache
  • Controleer ctx.GetEndpoint() tussen UseRouting en MapXxx om informatie over de overeenkomende route te lezen
Gratis beginnen

Leer C# met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
93
Lessen
346

Veelgestelde vragen

Is de les “Volgorde van middleware en ingebouwde middleware” gratis?

Ja — de volledige tekst van “Volgorde van middleware en ingebouwde middleware” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C# Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C# Academy bevat in totaal 4 lessen.

Wat leer ik in “Volgorde van middleware en ingebouwde middleware”?

Krijg inzicht in de juiste volgorde van middleware voor authenticatie, routing, CORS en exception handling. Je oefent met C# Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C# Academy te beginnen?

Ervaring vooraf is niet nodig. C# Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Volgorde van middleware en ingebouwde middleware”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C# Academy?

Ja. Elke les over C# Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Overzicht van de ASP.NET Core-pipeline
  2. Aangepaste middleware schrijven
  3. Kortsluiten en vertakken
  4. Volgorde van middleware en ingebouwde middleware
← Terug naar C# Academy