.Net Core Middleware Nedir ?
Middleware, ara yazılım anlamına gelmektedir. HTTP Request(istek) ve HTTP Response(yanıt) gibi isteklerin yapılacak işlemler için araya giren işlemlerdir. Middleware’lerin sıralaması önemlidir çünkü istek veya cevap bir middleware’den diğerine oradan da bir başka middleware’e geçer.
Middleware’ı uçağa binme işlemleri gibi düşünebiliriz. Burada uçak bizim uygulamamız olsun ve aradaki işlemlerde middleware olsun.
- Havaalanı kapısından içeri giriş yaptık, yani uygulamamıza request(istek) gönderdik.
- Güvenlikten geçiyoruz bunun için eşyalarımızı kaplara koyup cihaza veriyoruz ve görevli kişi bunları kontrol ediyor, bu kısmı uygulamamızdaki çerez, ip kontrolü gibi düşünebilirsiniz.
- Check-In işlemi için bankomuza gidiyoruz, bu aşamayı uygulamamızdaki Kimlik Doğrulama kısmı olarak düşünebilirsiniz.
- İkinci güvenlik ve bilet kontrolünden sonra uçağa biniş kapımıza geçiyoruz, uygulamamızdaki Yetkilendirme kısmı gibi düşünebilirsiniz.
- El bagajımızdaki sıvı miktarı firmalara göre değişiklik gösterir, bu kısmı da uygulamamız için yazdığımız Özel Middleware olarak düşünebiliriz.
- Kapımız açıldı ve uçağa bindik, artık uygulamamıza eriştik.
Peki uygulamalarımızda middleware ne işimize yarar? Nerede ihtiyacımız olur?
Şuan için aklıma gelen bazı örnekler:
- Kimlik Doğrulaması
- Yetkilendirme
- Çerez İşlemleri
- Hata Durumları
- Loglama
- Önbellekleme
Kısaca gelen HTTP isteği veya yanıtı hakkında işlemler yapmak veya değiştirmek istediğimizde Middleware’e ihtiyaç duyarız.
Middleware Metotları
- .Run() Metodu: Bu metottan sonra diğer hiçbir middleware çalışmaz. Uçak örneğimiz ile ilişkilendirecek olursak örneğin güvenlikten geçemeyen bir kişi uçağa binemez.
app.Run(async context =>
{
await context.Response.WriteAsync("Run Methodu Çalıştı.");
});
- .Use() Metodu: İşlemlerini bitirdikten sonra diğer middleware geçer.
app.Use(async (context, next) =>
{
// İşlemler
await next.Invoke();
});
- .Map() Metodu: Gelen HTTP isteğinin Path’ine göre işlemler yapabiliriz ve içerisinde .Run() ve .Use() metotlarını kullanabiliriz. Uçak örneğimiz ile ilişkilendirecek olursak mesela tekerlekli sandalye kullanacak kişiler için farklı işlemler uygulanır.
app.Map("/test", builder =>
{
builder.Run(async (context) =>
{
await context.Response.WriteAsync("Teste istek gönderildi");
});
});
- .MapWhen() Metodu: Map metodundan farklı olarak filtreleme işlemleri yapabiliyoruz mesela tüm HttpRequest GET isteklerinde.
app.MapWhen(x => x.Request.Method == "GET", builder =>
{
builder.Run(async context =>
await context.Response.WriteAsync("Get İsteği Yapıldı"));
});
Middleware hakkında öğrendiklerimizden sonra “.Net Core Middleware Nasıl Kullanılır ?” yazımda kendimize özel bir middleware oluşturup kullanacağız.