Bir HTTP isteği web sunucusuna ulaştığında, tarayıcıdan gelen bu isteğin uygulamaya ulaşmadan önce geçtiği bir dizi işlem vardır. Örneğin, kimlik doğrulama yapılabilir, istek loglanabilir ya da hata yönetimi sağlanabilir. Bu işlemlerin her biri, ASP.NET C
ASP.NET Core'da Middleware Nedir? Kendi Middleware'ini Yazmak

Bir HTTP isteği web sunucusuna ulaştığında, tarayıcıdan gelen bu isteğin uygulamaya ulaşmadan önce geçtiği bir dizi işlem vardır. Örneğin, kimlik doğrulama yapılabilir, istek loglanabilir ya da hata yönetimi sağlanabilir. Bu işlemlerin her biri, ASP.NET Core'da middleware (ara katman yazılımı) olarak adlandırılır.
ASP.NET Core’un en güçlü yönlerinden biri de bu middleware mimarisidir. Her middleware, gelen isteği işler, gerekiyorsa bir yanıt döner veya bir sonraki middleware’e iletir. Bu sistem sayesinde uygulama davranışını modüler ve esnek bir şekilde kontrol edebiliriz.
Bu yazıda middleware kavramının ne olduğunu, nasıl çalıştığını ve nasıl özel bir middleware yazılacağını anlatacağız.
Middleware Nedir?
Middleware, ASP.NET Core uygulamasında HTTP isteklerinin geçtiği ardışık yazılım bileşenleridir. Her middleware, isteği işleyebilir, değiştirebilir ya da bir sonraki bileşene iletebilir. Middleware'ler sıralı çalışır ve bu sıralama Startup.cs
dosyasındaki Configure
metodunda belirlenir.
Basit Akış Mantığı:
HTTP İsteği → Middleware 1 → Middleware 2 → Controller
Varsayılan Middleware Örnekleri
ASP.NET Core, birçok hazır middleware ile birlikte gelir:
-
UseRouting()
– URL yönlendirmesi yapar -
UseAuthentication()
– Kimlik doğrulama kontrolü -
UseAuthorization()
– Yetkilendirme denetimi -
UseEndpoints()
– Controller ve actionlara yönlendirme -
UseStaticFiles()
– CSS, JS gibi statik dosyaları sunar
Basit Bir Özel Middleware Yazalım
1. Yeni Middleware Sınıfı Oluşturma
public class ZamanlamaMiddleware
{
private readonly RequestDelegate _next;
public ZamanlamaMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
var baslangic = DateTime.Now;
await _next(context); // Bir sonraki middleware’e geç
var bitis = DateTime.Now;
var fark = bitis - baslangic;
Console.WriteLine($"İstek işlenme süresi: {fark.TotalMilliseconds} ms");
}
}
2. Startup.cs Dosyasına Eklemek
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiddleware<ZamanlamaMiddleware>(); // Özel middleware’i devreye al
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Bu örnekte, her gelen isteğin işlenme süresi hesaplanarak konsola yazdırılıyor.
Middleware Yazarken Dikkat Edilmesi Gerekenler
-
await _next(context)
komutu çağrılmazsa istek zinciri kesilir. -
Middleware sıralaması çok önemlidir. Örneğin,
UseRouting()
çağrılmadan önce yönlendirme yapılamaz. -
Ortak işlemler (loglama, hata yönetimi, CORS vb.) için özelleştirilebilir.
Gerçek Hayatta Kullanım Alanları
-
Loglama – Her isteği ve yanıtı kaydetmek
-
CORS işlemleri – Tarayıcıdan gelen istekleri kontrol etmek
-
Hata yönetimi – Global exception handling
-
Kimlik kontrolü – Header’da token var mı kontrol etmek
-
Cache yönetimi – Sayfa sonuçlarını önbelleğe almak
Middleware mimarisi sayesinde bu işlemleri modül modül yönetmek mümkündür.
Kendi middleware'inizi yazarak, uygulamanızın istek-yanıt döngüsüne doğrudan müdahale edebilirsiniz. Böylece performans ölçümleri, güvenlik kontrolleri, hata yakalama gibi sistemsel işlemleri controller’lara karıştırmadan merkezi olarak yönetmiş olursunuz.
ASP.NET Core’un modern mimarisi sayesinde bu tür yapıların kurulması hem kolaydır hem de sürdürülebilirdir. Kendi projelerinizde, ihtiyaçlarınıza özel middleware'ler oluşturarak uygulamanızın kontrolünü tamamen elinize alabilirsiniz.