ASP.NET Core’da Middleware Kullanımı ve Özelleştirme Teknikleri
ASP.NET Core, modern web uygulamaları geliştirmek için kullanılan güçlü bir çerçevedir. Bu çerçevenin en önemli bileşenlerinden biri de “Middleware” yapısıdır. Middleware, HTTP isteklerini ve yanıtlarını işleyen yazılım bileşenleridir. ASP.NET Core’da, istek işleme hattına çeşitli middleware bileşenleri ekleyerek uygulamanızın işlevselliğini özelleştirebilirsiniz. Bu makalede, ASP.NET Core’da middleware kullanımı ve özelleştirme tekniklerini derinlemesine inceleyeceğiz.
Middleware Nedir?
Middleware, bir HTTP isteği veya yanıtı üzerinde işlem yapabilen bir yazılım bileşenidir. ASP.NET Core uygulamalarında, middleware bileşenleri istek işleme hattında sıralı olarak çalışır. Her middleware bileşeni, bir sonraki bileşeni çağırarak veya isteği sonlandırarak işleyişi kontrol edebilir.
Middleware İşleme Hattı
ASP.NET Core’da, middleware bileşenleri Configure
metodu içinde tanımlanır ve sıralı olarak çalıştırılır. İstek işleme hattı, her middleware bileşeninin sırasıyla çalıştığı bir boru hattı gibi düşünülebilir.
public void Configure(IApplicationBuilder app) { app.UseMiddleware(); app.UseMiddleware(); app.UseMiddleware(); app.UseMiddleware(); }
Bu kod, Configure
metodunda dört farklı middleware bileşenini sıralı olarak tanımlar. Her bir middleware, bir sonraki middleware’i çağırarak işleme hattında ilerler.
Özel Middleware Oluşturma
ASP.NET Core, kendi özel middleware bileşenlerinizi oluşturmanıza olanak tanır. Özel middleware oluşturmak için bir sınıf tanımlamanız ve bu sınıfta Invoke
veya InvokeAsync
metodunu uygulamanız gerekir.
Örnek: Basit Bir Logging Middleware
Aşağıda, gelen her isteği ve yanıtı konsola yazdıran basit bir logging middleware örneği bulunmaktadır.
public class LoggingMiddleware { private readonly RequestDelegate _next; public LoggingMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { Console.WriteLine($"Request: {context.Request.Method} {context.Request.Path}"); await _next(context); Console.WriteLine($"Response: {context.Response.StatusCode}"); } }
Bu middleware, her HTTP isteği için konsola istek metodu ve yolu, yanıtta ise durum kodunu yazdırır. RequestDelegate
türündeki _next
parametresi, bir sonraki middleware’i temsil eder.
Middleware’i Uygulamaya Ekleme
Oluşturduğunuz middleware’i uygulamaya eklemek için Configure
metodunda UseMiddleware
uzantı metodunu kullanabilirsiniz.
public void Configure(IApplicationBuilder app) { app.UseMiddleware(); }
Bu kod, LoggingMiddleware
bileşenini istek işleme hattına ekler.
Middleware ile Hata Yönetimi
Hata yönetimi, web uygulamalarında önemli bir bileşendir. ASP.NET Core’da, özel hata yönetimi middleware bileşenleri oluşturarak uygulamanızın hata yönetimini özelleştirebilirsiniz.
Örnek: Hata Yönetimi Middleware
Aşağıda, hataları yakalayan ve özel bir hata sayfası döndüren bir middleware örneği bulunmaktadır.
public class ErrorHandlingMiddleware { private readonly RequestDelegate _next; public ErrorHandlingMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { try { await _next(context); } catch (Exception ex) { await HandleExceptionAsync(context, ex); } } private static Task HandleExceptionAsync(HttpContext context, Exception exception) { context.Response.ContentType = "application/json"; context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; var result = JsonSerializer.Serialize(new { error = exception.Message }); return context.Response.WriteAsync(result); } }
Bu middleware, istek işleme sırasında oluşan hataları yakalar ve özel bir JSON hata yanıtı döndürür.
Hata Yönetimi Middleware’ini Uygulamaya Ekleme
public void Configure(IApplicationBuilder app) { app.UseMiddleware(); }
Bu kod, ErrorHandlingMiddleware
bileşenini istek işleme hattına ekler.
Middleware ile Performans Optimizasyonu
Performans optimizasyonu, web uygulamalarının hızlı ve verimli çalışmasını sağlamak için kritik öneme sahiptir. Middleware kullanarak, performansı artırmak için çeşitli optimizasyonlar yapabilirsiniz.
Örnek: Caching Middleware
Aşağıda, istekleri önbelleğe alarak performansı artıran bir caching middleware örneği bulunmaktadır.
public class CachingMiddleware { private readonly RequestDelegate _next; private readonly IMemoryCache _cache; public CachingMiddleware(RequestDelegate next, IMemoryCache cache) { _next = next; _cache = cache; } public async Task InvokeAsync(HttpContext context) { if (_cache.TryGetValue(context.Request.Path, out string cachedResponse)) { await context.Response.WriteAsync(cachedResponse); return; } var originalBodyStream = context.Response.Body; using var responseBody = new MemoryStream(); context.Response.Body = responseBody; await _next(context); context.Response.Body.Seek(0, SeekOrigin.Begin); var responseText = await new StreamReader(context.Response.Body).ReadToEndAsync(); context.Response.Body.Seek(0, SeekOrigin.Begin); _cache.Set(context.Request.Path, responseText, TimeSpan.FromMinutes(1)); await responseBody.CopyToAsync(originalBodyStream); } }
Bu middleware, yanıtları bir dakika boyunca önbelleğe alarak tekrarlanan istekler için performansı artırır.
Caching Middleware’ini Uygulamaya Ekleme
public void Configure(IApplicationBuilder app, IMemoryCache cache) { app.UseMiddleware(cache); }
Bu kod, CachingMiddleware
bileşenini istek işleme hattına ekler ve IMemoryCache
hizmetini kullanır.
Güvenlik için Middleware Kullanımı
Güvenlik, web uygulamalarının en önemli bileşenlerinden biridir. ASP.NET Core’da, güvenliği artırmak için middleware kullanabilirsiniz.
Örnek: IP Kısıtlama Middleware
Aşağıda, belirli IP adreslerinden gelen istekleri engelleyen bir middleware örneği bulunmaktadır.
public class IpRestrictionMiddleware { private readonly RequestDelegate _next; private readonly List _allowedIps; public IpRestrictionMiddleware(RequestDelegate next, List allowedIps) { _next = next; _allowedIps = allowedIps; } public async Task InvokeAsync(HttpContext context) { var remoteIp = context.Connection.RemoteIpAddress?.ToString(); if (!_allowedIps.Contains(remoteIp)) { context.Response.StatusCode = (int)HttpStatusCode.Forbidden; await context.Response.WriteAsync("Forbidden"); return; } await _next(context); } }
Bu middleware, yalnızca belirli IP adreslerinden gelen isteklerin işlenmesine izin verir.
IP Kısıtlama Middleware’ini Uygulamaya Ekleme
public void Configure(IApplicationBuilder app) { var allowedIps = new List { "127.0.0.1", "::1" }; app.UseMiddleware(allowedIps); }
Bu kod, IpRestrictionMiddleware
bileşenini istek işleme hattına ekler ve yalnızca localhost’tan gelen istekleri kabul eder.
Sonuç
ASP.NET Core’da middleware kullanımı, uygulamanızın işlevselliğini ve performansını artırmak için güçlü bir araçtır. Özel middleware bileşenleri oluşturarak uygulamanızın ihtiyaçlarına göre özelleştirebilirsiniz. Middleware kullanarak hata yönetimi, performans optimizasyonu ve güvenlik gibi kritik alanlarda önemli iyileştirmeler yapabilirsiniz.
Eğer daha fazla bilgi almak veya sunucu çözümleriyle ilgili destek almak isterseniz, VDS Sunucular ve Cloud Sunucular gibi seçenekleri inceleyebilirsiniz. Ayrıca, Firewall Hizmetleri ile uygulamanızın güvenliğini artırabilirsiniz.