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 JSONBerkas 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 policiesCORS 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 pipelineDunia 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
- Gambaran Umum Alur ASP.NET Core
- Menulis Middleware Kustom
- Penghentian Singkat & Percabangan
- Urutan Middleware & Middleware Bawaan