ASP Genel VMware

ASP.NET Core ile Middleware Kullanımı ve Örnekleri

ASP.NET Core ile Middleware Kullanımı ve Örnekleri

ASP.NET Core ile Middleware Kullanımı ve Örnekleri

ASP.NET Core, modern web uygulamaları geliştirmek için kullanılan popüler bir framework’tür. Bu framework’ün en güçlü özelliklerinden biri, HTTP isteklerini işlemek için kullanılan “Middleware” yapısıdır. Middleware, istek ve yanıt işleme hattında yer alan yazılım bileşenleridir ve her biri belirli bir işlevi yerine getirir. Bu makalede, ASP.NET Core’da middleware kullanımını detaylı bir şekilde inceleyeceğiz ve çeşitli örneklerle nasıl uygulandığını göstereceğiz.

Middleware Nedir?

Middleware, ASP.NET Core uygulamalarında HTTP isteklerini işleyen ve yanıt döndüren bir bileşendir. Her middleware, bir sonraki middleware’e geçmeden önce isteği işleyebilir, değiştirebilir veya sonlandırabilir. Middleware’ler, uygulamanın başlangıcında yapılandırılır ve genellikle bir boru hattı (pipeline) olarak adlandırılan bir sırayla çalışır.

Middleware Çalışma Prensibi

Middleware’ler, bir HTTP isteği alır, üzerinde işlem yapar ve isteği bir sonraki middleware’e iletir. Her middleware, isteği işleyebilir, yanıt oluşturabilir veya bir hata durumunda işleme son verebilir. İşte temel bir middleware yapısının nasıl çalıştığını gösteren bir örnek:

public class CustomMiddleware
{
    private readonly RequestDelegate _next;

    public CustomMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // İstek öncesi işlemler
        await _next(context);
        // Yanıt sonrası işlemler
    }
}

Bu kod, bir middleware’in temel yapısını gösterir. InvokeAsync metodu, isteği işlemek için kullanılır ve await _next(context) satırı, isteği bir sonraki middleware’e iletir.

ASP.NET Core’da Middleware Kullanımı

ASP.NET Core’da middleware kullanımı oldukça esnektir. Aşağıda, farklı türde middleware’lerin nasıl yapılandırıldığını ve kullanıldığını gösteren örnekler bulunmaktadır.

Yerleşik Middleware’ler

ASP.NET Core, sık kullanılan işlevler için bir dizi yerleşik middleware ile birlikte gelir. Bunlar arasında hata işleme, kimlik doğrulama, statik dosya sunumu ve oturum yönetimi gibi işlevler bulunur.

Hata İşleme Middleware’i

Hata işleme middleware’i, uygulama boyunca oluşabilecek hataları yakalamak ve kullanıcıya anlamlı hata mesajları döndürmek için kullanılır. Aşağıdaki örnek, hata işleme middleware’inin nasıl yapılandırıldığını göstermektedir:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
}

Bu kod, geliştirme ortamında detaylı hata sayfaları gösterirken, üretim ortamında kullanıcı dostu hata sayfaları sunar.

Özel Middleware Oluşturma

Kendi özel middleware’inizi oluşturmak, uygulamanızın ihtiyaçlarına özel işlevler eklemek için harika bir yoldur. Örneğin, tüm isteklerde bir başlık eklemek veya belirli bir loglama mekanizması uygulamak isteyebilirsiniz.

Özel Middleware Örneği

Aşağıda, her HTTP isteğine özel bir başlık ekleyen basit bir middleware örneği bulunmaktadır:

public class HeaderMiddleware
{
    private readonly RequestDelegate _next;

    public HeaderMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        context.Response.OnStarting(() =>
        {
            context.Response.Headers.Add("X-Custom-Header", "MiddlewareExample");
            return Task.CompletedTask;
        });

        await _next(context);
    }
}

public static class HeaderMiddlewareExtensions
{
    public static IApplicationBuilder UseHeaderMiddleware(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware();
    }
}

Bu middleware, yanıtın başlangıcında “X-Custom-Header” başlığını ekler ve ardından isteği bir sonraki middleware’e iletir.

Middleware Kullanarak Performans Optimizasyonu

Middleware, uygulamanızın performansını optimize etmek için de kullanılabilir. Örneğin, önbellekleme mekanizmaları veya sık kullanılan verileri saklamak için middleware kullanabilirsiniz.

Önbellekleme Middleware’i

Aşağıdaki örnek, yanıtları önbelleğe almak için kullanılan bir middleware’i göstermektedir:

public class CacheMiddleware
{
    private readonly RequestDelegate _next;
    private readonly IMemoryCache _cache;

    public CacheMiddleware(RequestDelegate next, IMemoryCache cache)
    {
        _next = next;
        _cache = cache;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        if (_cache.TryGetValue(context.Request.Path, out var cachedResponse))
        {
            await context.Response.WriteAsync((string)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 = new StreamReader(context.Response.Body).ReadToEnd();
            _cache.Set(context.Request.Path, responseText, TimeSpan.FromMinutes(1));

            context.Response.Body.Seek(0, SeekOrigin.Begin);
            await responseBody.CopyToAsync(originalBodyStream);
        }
    }
}

Bu middleware, yanıtları önbelleğe alır ve aynı istek tekrarlandığında önbellekten yanıt döndürerek performansı artırır.

Güvenlik ve Hata Yönetimi

Middleware, uygulamanızın güvenliğini artırmak ve hataları etkili bir şekilde yönetmek için de kullanılabilir. Örneğin, tüm isteklerde belirli bir kimlik doğrulama mekanizması uygulamak veya özel hata sayfaları sunmak için middleware kullanabilirsiniz.

Kimlik Doğrulama Middleware’i

ASP.NET Core, kimlik doğrulama için bir dizi yerleşik middleware sunar. Aşağıdaki örnek, JWT (JSON Web Token) tabanlı kimlik doğrulama middleware’inin nasıl yapılandırıldığını göstermektedir:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = "yourdomain.com",
                ValidAudience = "yourdomain.com",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecretKey"))
            };
        });
}

public void Configure(IApplicationBuilder app)
{
    app.UseAuthentication();
    app.UseAuthorization();
}

Bu kod, JWT kullanarak kimlik doğrulama işlemini gerçekleştirir ve yalnızca doğrulanmış isteklerin işlenmesini sağlar.

Gerçek Dünya Senaryoları

Middleware, gerçek dünya uygulamalarında çeşitli senaryolar için kullanılabilir. Örneğin, kullanıcı etkinliklerini izlemek, uygulama metriklerini toplamak veya belirli kullanıcı rollerine göre erişim kontrolü sağlamak için middleware kullanabilirsiniz.

Kullanıcı Etkinlik İzleme Middleware’i

Aşağıdaki örnek, kullanıcı etkinliklerini izleyen ve loglayan bir middleware’i göstermektedir:

public class ActivityLoggingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger _logger;

    public ActivityLoggingMiddleware(RequestDelegate next, ILogger logger)
    {
        _next = next;
        _logger = logger;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        _logger.LogInformation($"Request: {context.Request.Method} {context.Request.Path}");
        await _next(context);
        _logger.LogInformation($"Response: {context.Response.StatusCode}");
    }
}

Bu middleware, her istek ve yanıtı loglar, böylece kullanıcı etkinliklerini izleyebilirsiniz.

Sonuç

ASP.NET Core’da middleware, uygulamanızın işlevselliğini genişletmek ve özelleştirmek için güçlü bir araçtır. Yerleşik middleware’ler ile hızlı başlangıç yapabilir, özel middleware’ler oluşturarak uygulamanıza özgü ihtiyaçları karşılayabilirsiniz. Performans optimizasyonu, güvenlik ve hata yönetimi gibi konularda middleware’ler, ASP.NET Core uygulamalarınızın daha etkili ve verimli çalışmasını sağlar.

Daha fazla bilgi için ASP.NET Core dokümantasyonunu inceleyebilir ve VDS Sunucular gibi uygun altyapı çözümleriyle projelerinizi destekleyebilirsiniz. Ayrıca, Cloud Sunucular ve Sanal Sunucular gibi hizmetlerle projelerinizi ölçeklendirebilir ve daha geniş kitlelere ulaşabilirsiniz.