0Pricing
C# Academy · Pelajaran

Urutan Middleware & Middleware Bawaan

Pahami urutan middleware yang tepat untuk autentikasi, perutean, CORS, dan penanganan pengecualian.

Urutan Middleware & Middleware Bawaan adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.

Mengapa Urutan Penting

Middleware ASP.NET Core berjalan persis sesuai urutan pendaftarannya. Urutan yang salah menyebabkan celah keamanan, masalah kinerja, atau perilaku yang tidak berjalan semestinya — misalnya, perutean harus dilakukan sebelum otorisasi, dan otorisasi harus dilakukan sebelum eksekusi titik akhir.

Urutan Middleware yang Disarankan

Microsoft mendokumentasikan urutan yang disarankan. Penyimpangan dari urutan tersebut menimbulkan masalah yang sulit dilacak. Berikut urutan baku untuk API ASP.NET Core produksi.

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

Penanganan Pengecualian di Urutan Pertama

Middleware penanganan pengecualian harus berada di urutan pertama, sebagai lapisan paling luar, agar dapat menangkap pengecualian dari semua middleware dan titik akhir berikutnya.

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

Berkas Statis Sebelum Perutean

Berkas statis (UseStaticFiles) sebaiknya ditempatkan sebelum perutean. Menyajikan berkas statis akan menghentikan alur lebih awal — tidak perlu menjalankan autentikasi atau perutean untuk /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.

Autentikasi Sebelum Otorisasi

UseAuthentication harus ditempatkan sebelum UseAuthorization. Autentikasi mengisi HttpContext.User; otorisasi memeriksa pengguna yang telah diisi tersebut terhadap kebijakan.

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

Middleware CORS harus dijalankan sebelum autentikasi agar permintaan preflight OPTIONS dapat ditangani tanpa memerlukan header autentikasi.

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

Middleware Bawaan yang Umum

ASP.NET Core menyediakan banyak komponen middleware bawaan. Dengan mengetahui fungsi masing-masing, Anda akan lebih memahami kapan dan bagaimana menggunakannya.

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

Pendalaman Middleware Perutean

UseRouting() mencocokkan permintaan masuk dengan pola rute dan menyimpan hasil pencocokannya di HttpContext. Kemudian, UseEndpoints() (atau MapXxx()) mengeksekusi titik akhir yang cocok.

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

Penempatan Kompresi Respons

Kompresi respons harus ditempatkan sebelum berkas statis dan perutean agar keluaran terkompresi ditulis sebelum konten dibuat. Tempatkan kompresi tepat setelah penanganan pengecualian.

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

Dunia Nyata: Alur Middleware Produksi Lengkap

Alur produksi lengkap yang menggabungkan semua rekomendasi menjadi tumpukan middleware yang tertata dengan baik dan aman.

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

Pemeriksaan Singkat

Mengapa UseAuthentication harus dijalankan sebelum UseAuthorization dalam alur middleware?

Ringkasan: Pengurutan Middleware & Middleware Bawaan

Inti pembelajaran:

  • Penanganan pengecualian terlebih dahulu, berkas statis sebelum perutean, autentikasi sebelum otorisasi, CORS sebelum autentikasi
  • Kompresi respons ditempatkan di awal (sebelum berkas statis) untuk mendapatkan efek maksimal
  • UseRouting + UseAuthorization + Map* — middleware di antaranya dapat membaca data rute
  • Bawaan: UseHsts, UseHttpsRedirection, UseStaticFiles, UseRateLimiter, UseOutputCache
  • Periksa ctx.GetEndpoint() di antara UseRouting dan MapXxx untuk membaca informasi rute yang cocok

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Urutan Middleware & Middleware Bawaan” gratis?

Ya — teks lengkap “Urutan Middleware & Middleware Bawaan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Urutan Middleware & Middleware Bawaan”?

Pahami urutan middleware yang tepat untuk autentikasi, perutean, CORS, dan penanganan pengecualian. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Urutan Middleware & Middleware Bawaan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Gambaran Umum Alur ASP.NET Core
  2. Menulis Middleware Kustom
  3. Penghentian Singkat & Percabangan
  4. Urutan Middleware & Middleware Bawaan
← Kembali ke C# Academy