ASP Genel VMware

ASP.NET Core’da Middleware Kullanımı ve Özelleştirme Teknikleri

ASP.NET Core'da Middleware Kullanımı ve Özelleştirme Teknikleri

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.