Ara Yazılım Sıralaması ve Yerleşik Ara Yazılım
Kimlik doğrulama, yönlendirme, CORS ve özel durum yönetimi için doğru ara yazılım sıralamasını anlayın.
Ara Yazılım Sıralaması ve Yerleşik Ara Yazılım, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Sıra neden önemlidir?
ASP.NET Core ara yazılımı, kaydedildiği tam sırayla çalışır. Yanlış sıra güvenlik açıklarına, performans sorunlarına veya bozuk davranışlara neden olur — örneğin yönlendirme yetkilendirmeden önce, yetkilendirme ise uç nokta yürütmesinden önce gelmelidir.
Önerilen ara yazılım sırası
Microsoft önerilen sırayı belgeler. Bu sıradan sapmak, hata ayıklaması zor sorunlara yol açar. Aşağıda üretim ortamındaki bir ASP.NET Core API'si için standart sıra verilmiştir.
// 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();Özel durum işleme ilk sırada
Özel durum işleme ara yazılımı ilk (en dıştaki) sırada olmalıdır; böylece kendisinden sonra çalışan tüm ara yazılımlardan ve uç noktalardan kaynaklanan özel durumları yakalar.
// 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 JSONStatik dosyalar yönlendirmeden önce
Statik dosyalar (UseStaticFiles) yönlendirmeden önce gelmelidir. Statik bir dosya sunmak işlem hattında kısa devre oluşturur — /css/main.css için kimlik doğrulama veya yönlendirme çalıştırmaya gerek yoktur.
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.Kimlik doğrulama yetkilendirmeden önce
UseAuthentication, UseAuthorization'dan önce gelmelidir. Kimlik doğrulama HttpContext.User değerini doldurur; yetkilendirme ise doldurulmuş kullanıcıyı ilkelerle karşılaştırır.
// 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 Kimlik Doğrulamadan Önce
CORS ara katmanı, ön denetim OPTIONS isteklerinin kimlik doğrulama üst bilgileri gerektirmeden işlenebilmesi için kimlik doğrulamadan önce çalışmalıdır.
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();Yaygın Yerleşik Ara Katmanlar
ASP.NET Core, birçok yerleşik ara katman bileşeniyle birlikte gelir. Her birinin ne yaptığını bilmek, onları ne zaman ve nasıl kullanacağınızı anlamanıza yardımcı olur.
// 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();Yönlendirme Ara Katmanına Derinlemesine Bakış
UseRouting(), gelen isteği bir rota deseniyle eşleştirir ve eşleşmeyi HttpContext içinde saklar. Ardından UseEndpoints() (veya MapXxx()) eşleşen uç noktayı çalıştırır.
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");Yanıt Sıkıştırmasının Konumlandırılması
Yanıt sıkıştırması, sıkıştırılmış çıktının içerik oluşturulmadan önce yazılabilmesi için statik dosyalardan ve yönlendirmeden önce gelmelidir. Bunu doğrudan hata işleme işlem hattının arkasına yerleştirin.
// Correct placement for response compression:
app.UseExceptionHandler();
app.UseResponseCompression(); // before static files
app.UseStaticFiles(); // compressed static files
app.UseRouting();
// ... rest of pipelineGerçek Dünya: Tam Üretim İşlem Hattı
Tüm önerileri doğru sıralanmış ve güvenli bir ara katman yığınında birleştiren eksiksiz bir üretim işlem hattı.
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();Kısa Kontrol
UseAuthentication neden ara katman işlem hattında UseAuthorization'dan önce gelmelidir?
Özet: Ara Katman Sıralaması ve Yerleşik Ara Katmanlar
Temel çıkarımlar:
- Önce hata işleme, yönlendirmeden önce statik dosyalar, kimlik doğrulamadan önce yetkilendirme, kimlik doğrulamadan önce CORS
- En yüksek etki için yanıt sıkıştırması erken, yani statik dosyalardan önce uygulanır
- UseRouting + UseAuthorization + Map* — aralarındaki ara katmanlar rota verilerini okuyabilir
- Yerleşik özellikler: UseHsts, UseHttpsRedirection, UseStaticFiles, UseRateLimiter, UseOutputCache
- Eşleşen rota bilgilerini okumak için UseRouting ile MapXxx arasında
ctx.GetEndpoint()çağrısını denetleyin
Sıkça Sorulan Sorular
“Ara Yazılım Sıralaması ve Yerleşik Ara Yazılım” dersi ücretsiz mi?
Evet — “Ara Yazılım Sıralaması ve Yerleşik Ara Yazılım” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Ara Yazılım Sıralaması ve Yerleşik Ara Yazılım” dersinde ne öğreneceğim?
Kimlik doğrulama, yönlendirme, CORS ve özel durum yönetimi için doğru ara yazılım sıralamasını anlayın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Ara Yazılım Sıralaması ve Yerleşik Ara Yazılım” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- ASP.NET Core İşlem Hattına Genel Bakış
- Özel Ara Yazılım Yazma
- Kısa Devreye Alma ve Dallanma
- Ara Yazılım Sıralaması ve Yerleşik Ara Yazılım