C# Academy · Ders

Minimal API'lerde Ara Yazılım ve Filtreler

Minimal API işlem hatlarına kimlik doğrulama, yetkilendirme, özel durum yönetimi ve uç nokta filtreleri ekleyin.

3. ders / 413 adım

Minimal API'lerde Ara Yazılım ve Filtreler, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

Ara Yazılım ve Uç Nokta Filtreleri

ASP.NET Core'da iki genişletilebilirlik katmanı vardır: ara yazılım (tüm işlem hattını sarar ve her istek için çalışır) ve uç nokta filtreleri (yalnızca belirli uç noktalar için çalışır). Her ikisi de Minimal API'lerle kullanılabilir.

Minimal API'lere Ara Yazılım Ekleme

Standart ASP.NET Core ara yazılımı app.Use* metotlarıyla eklenir. Sıra önemlidir — ara yazılım, kaydedildiği sırayla çalışır.

var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.UseRateLimiter();

app.MapGet("/secure", () => "Protected endpoint")
   .RequireAuthorization();

app.Run();

Satır İçi Uç Nokta Filtreleri

Uç nokta filtreleri, tek bir uç noktayla sınırlı ara yazılım gibidir. Satır içinde bir filtre eklemek için AddEndpointFilter kullanın. Filtreler, next çağrısı yapmadan bir sonuç döndürerek işlemi kısa devreye sokabilir.

app.MapGet("/guarded", () => "Secret data")
   .AddEndpointFilter(async (ctx, next) =>
   {
       var header = ctx.HttpContext.Request.Headers["X-Api-Key"];
       if (header != "my-secret-key")
           return Results.Unauthorized();

       return await next(ctx); // proceed to handler
   });

Sınıf Tabanlı Uç Nokta Filtreleri

Yeniden kullanılabilir filtreler oluşturmak için IEndpointFilter uygulayın. Bunlar tek tek uç noktalara veya tüm rota gruplarına uygulanabilir.

public class LoggingFilter : IEndpointFilter
{
    private readonly ILogger<LoggingFilter> _logger;
    public LoggingFilter(ILogger<LoggingFilter> logger) => _logger = logger;

    public async ValueTask<object?> InvokeAsync(
        EndpointFilterInvocationContext ctx,
        EndpointFilterDelegate next)
    {
        _logger.LogInformation("Before: {Path}", ctx.HttpContext.Request.Path);
        var result = await next(ctx);
        _logger.LogInformation("After: {Path}",  ctx.HttpContext.Request.Path);
        return result;
    }
}

// Apply to a group
app.MapGroup("/api").AddEndpointFilter<LoggingFilter>();

İstisna İşleme Ara Yazılımı

Yakalanmamış istisnaları yakalamak ve RFC 7807 sorun yanıtları döndürmek için app.UseExceptionHandler veya yerleşik ProblemDetails ara yazılımını kullanın.

builder.Services.AddProblemDetails();

var app = builder.Build();

app.UseExceptionHandler();
// OR for custom logic:
app.UseExceptionHandler(errApp =>
    errApp.Run(async ctx =>
    {
        var ex = ctx.Features.Get<IExceptionHandlerFeature>()?.Error;
        ctx.Response.StatusCode = 500;
        await ctx.Response.WriteAsJsonAsync(new { error = ex?.Message });
    }));

Kısa Devreli Ara Yazılım

Tüm işlem hattını çalıştırmadan hemen bir yanıt döndürmek için app.MapShortCircuit() (.NET 8+) veya bir filtre içinde Results.StatusCode() kullanın.

// Block known bad bots at the edge
app.MapGet("/robots.txt", () => "User-agent: *\nDisallow: /")
   .ShortCircuit(); // .NET 8: returns response immediately

// Or in a filter:
app.MapGet("/maintenance", () => "OK")
   .AddEndpointFilter((ctx, next) =>
       ValueTask.FromResult<object?>(Results.StatusCode(503)));

.NET 7+ ile Hız Sınırlama

Yerleşik hız sınırlayıcı ara yazılımı, uç noktaları kötüye kullanıma karşı korur. İlkeleri genel olarak veya uç nokta bazında RequireRateLimiting() ile uygulayın.

using System.Threading.RateLimiting;

builder.Services.AddRateLimiter(opt =>
{
    opt.AddFixedWindowLimiter("fixed", o =>
    {
        o.PermitLimit     = 10;
        o.Window          = TimeSpan.FromSeconds(10);
        o.QueueLimit      = 0;
        o.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
    });
    opt.RejectionStatusCode = StatusCodes.Status429TooManyRequests;
});

app.UseRateLimiter();
app.MapGet("/search", Search).RequireRateLimiting("fixed");

CORS Yapılandırması

Hangi kaynakların API'nize erişebileceğini denetlemek için CORS ilkelerini hizmetlerde yapılandırın ve bunları genel olarak veya uç nokta bazında uygulayın.

builder.Services.AddCors(opt =>
    opt.AddPolicy("AllowFrontend", policy =>
        policy.WithOrigins("https://myapp.com")
              .AllowAnyHeader()
              .AllowAnyMethod()));

app.UseCors("AllowFrontend");

// Or per endpoint:
app.MapGet("/public-data", () => "data")
   .RequireCors("AllowFrontend");

Çıktı Önbelleğe Alma Ara Yazılımı

AddOutputCache, yanıtları sunucu tarafında önbelleğe alır. Her istekte veritabanına erişmeden önbelleğe alınmış yanıtlar sunmak için bunu belirli uç noktalara uygulayın.

builder.Services.AddOutputCache();

app.UseOutputCache();

app.MapGet("/products", async (AppDbContext db) =>
    Results.Ok(await db.Products.AsNoTracking().ToListAsync()))
   .CacheOutput(p => p.Expire(TimeSpan.FromMinutes(5)));

Filtre Sırası ve Zincirleme

Filtreler eklendikleri sırayla çalışır (dıştaki önce, içteki sonra — ara yazılım gibi). Aynı uç noktada veya grupta birden çok filtreyi zincirleyebilirsiniz.

app.MapPost("/orders", CreateOrder)
   .AddEndpointFilter<LoggingFilter>()      // runs first
   .AddEndpointFilter<ValidationFilter>()   // runs second
   .AddEndpointFilter<AuthFilter>()         // runs third
   .RequireAuthorization();                 // JWT checked by middleware

Gerçek Dünya: API Anahtarı Ara Yazılımı

Anahtarı bir header alanından okuyan ve geçersizse 401 yanıtıyla işlemi kısa devreye sokan yeniden kullanılabilir bir API anahtarı ara yazılımı.

public class ApiKeyMiddleware
{
    private readonly RequestDelegate _next;
    private readonly string _expectedKey;

    public ApiKeyMiddleware(RequestDelegate next, IConfiguration cfg)
    {
        _next = next;
        _expectedKey = cfg["ApiKey"] ?? throw new Exception("ApiKey not configured");
    }

    public async Task InvokeAsync(HttpContext ctx)
    {
        if (!ctx.Request.Headers.TryGetValue("X-Api-Key", out var key)
            || key != _expectedKey)
        {
            ctx.Response.StatusCode = 401;
            await ctx.Response.WriteAsync("Invalid API key");
            return;
        }
        await _next(ctx);
    }
}

app.UseMiddleware<ApiKeyMiddleware>();

Hızlı Kontrol

Minimal API'lerde ara yazılım ile uç nokta filtreleri arasındaki temel fark nedir?

Özet: Ara Yazılım ve Filtreler

Önemli çıkarımlar:

  • Ara yazılım (UseX), işlem hattı sırasına göre genel olarak her istek için çalışır
  • Uç nokta filtreleri (AddEndpointFilter), belirli uç noktalarla veya gruplarla sınırlıdır
  • Yeniden kullanılabilir ve DI ile uyumlu filtre sınıfları için IEndpointFilter uygulayın
  • Yerleşik ara yazılım: hız sınırlama, CORS, çıktı önbelleğe alma ve istisna işleme
  • Filtre sırası önemlidir — ara yazılım gibi iç içe çalışırlar (ilk eklenen en dıştadır)
Başlamak ücretsiz

Yapay zeka eğitmeniyle C# öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
93
Dersler
346

Sıkça Sorulan Sorular

“Minimal API'lerde Ara Yazılım ve Filtreler” dersi ücretsiz mi?

Evet — “Minimal API'lerde Ara Yazılım ve Filtreler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“Minimal API'lerde Ara Yazılım ve Filtreler” dersinde ne öğreneceğim?

Minimal API işlem hatlarına kimlik doğrulama, yetkilendirme, özel durum yönetimi ve uç nokta filtreleri ekleyin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Minimal API'lerde Ara Yazılım ve Filtreler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İlk Minimal API'nizi Oluşturma
  2. Yol Grupları, Parametreler ve Doğrulama
  3. Minimal API'lerde Ara Yazılım ve Filtreler
  4. OpenAPI, Sürümleme ve Dağıtım
← C# Academy Sayfasına Dön