0Pricing
C# Academy · Ders

Kısa Devreye Alma ve Dallanma

İstek koşullarına göre işlem hattını dallandırmak veya sonlandırmak için MapWhen, UseWhen ve terminal ara yazılımı kullanın.

Kısa Devreye Alma ve Dallanma, 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.

Dallanma ve kısa devre

Her isteğin ara yazılım işlem hattının tamamından geçmesi gerekmez. ASP.NET Core, dallanma (alt kümeleri farklı işlem hatlarına yönlendirme) ve kısa devre (işlemeyi durdurup hemen dönme) için araçlar sağlar.

Map: Yola göre kalıcı dal

Map kalıcı bir dal oluşturur — ön ekle eşleşen istekler dala girer ve NEVER ana işlem hattına dönmez.

app.Map("/api", apiApp =>
{
    apiApp.UseAuthentication();
    apiApp.UseAuthorization();
    apiApp.Run(async ctx =>
        await ctx.Response.WriteAsync("API branch"));
});

// Requests to /api/... enter the branch above.
// Requests to /public/... skip the branch entirely.
app.Run(async ctx =>
    await ctx.Response.WriteAsync("Main pipeline"));

MapWhen: Koşula göre dallanma

MapWhen herhangi bir koşula (üst bilgiler, sorgu parametreleri veya özel mantık) göre dallanır. Map gibi bu dal da kalıcıdır — ana işlem hattına yeniden katılmaz.

// Branch when a specific header is present
app.MapWhen(
    ctx => ctx.Request.Headers.ContainsKey("X-Internal"),
    internalApp =>
    {
        internalApp.UseMiddleware<InternalApiMiddleware>();
        internalApp.Run(async ctx =>
            await ctx.Response.WriteAsync("Internal route"));
    });

// Branch on query parameter
app.MapWhen(
    ctx => ctx.Request.Query.ContainsKey("legacy"),
    legacyApp => legacyApp.UseMiddleware<LegacyHandlerMiddleware>());

UseWhen: Yeniden katılan koşullu dal

UseWhen, MapWhen gibidir; ancak dal tamamlandıktan sonra ana işlem hattına yeniden katılır. Böylece işlem hattını çatallamadan ara yazılımı koşullu olarak ekleyebilirsiniz.

// Log only for authenticated API calls; public routes not logged
app.UseWhen(
    ctx => ctx.Request.Path.StartsWithSegments("/api")
           && ctx.User.Identity?.IsAuthenticated == true,
    loggedApp =>
    {
        loggedApp.UseMiddleware<AuditMiddleware>();
    });

// All requests continue here after the branch
app.UseRouting();
app.MapControllers();

Next çağrılmayarak kısa devre

Her ara yazılım, yanıtı yazarak ve next çağrısı yapmayarak kısa devre oluşturabilir. İşlem hattı o noktada durur ve yanıt istemciye döndürülür.

app.Use(async (ctx, next) =>
{
    // IP allowlist check
    var ip = ctx.Connection.RemoteIpAddress?.ToString();
    var allowed = new[] { "127.0.0.1", "::1", "10.0.0.0/8" };

    if (!IsAllowed(ip, allowed))
    {
        ctx.Response.StatusCode = 403;
        await ctx.Response.WriteAsJsonAsync(
            new { error = "Access denied from this IP" });
        return; // short-circuit
    }

    await next(ctx); // proceed
});

.NET 8'de ShortCircuit()

.NET 8'de MapShortCircuit ve uç noktalardaki ShortCircuit() genişletmesi, bildirimsel ve yüksek düzeyde iyileştirilmiş bir kısa devre yolu sağlar.

// Reject known bad paths immediately — skip entire pipeline
app.MapShortCircuit(404, "robots.txt", "favicon.ico");

// Or on a specific endpoint:
app.MapGet("/health", () => "OK")
   .ShortCircuit(); // skips auth, rate limiting, etc.

// 'Run' middleware also short-circuits:
app.Map("/old-api", old =>
    old.Run(ctx =>
    {
        ctx.Response.StatusCode = 301;
        ctx.Response.Headers.Location = "/api/v2";
        return Task.CompletedTask;
    }));

Sonlandırıcı ara yazılım ve uç nokta yönlendirmesi

.NET 3'ten önce app.Run() tek sonlandırma seçeneğiydi. Artık uç nokta yönlendirmesi (MapGet, MapControllers) tercih ediliyor — bu yaklaşım yetkilendirmeye, hız sınırlamaya ve meta verilere katılır.

// OLD: terminal middleware
app.Run(async ctx => {
    if (ctx.Request.Path == "/ping")
        await ctx.Response.WriteAsync("pong");
});

// PREFERRED: endpoint routing
app.MapGet("/ping", () => "pong")
   .WithTags("Health")
   .AllowAnonymous()
   .RequireRateLimiting("basic");

Yol eşleştirmesinin incelikleri

Map("/api"), /api ve /api/anything yollarıyla eşleşir. Eşleşen yol, dalın içinde Request.Path'ten çıkarılır ve Request.PathBase'e yerleştirilir.

app.Map("/api", apiApp =>
{
    apiApp.Use(async (ctx, next) =>
    {
        // Path in branch: /users/42 (prefix removed)
        Console.WriteLine(ctx.Request.Path);     // /users/42
        Console.WriteLine(ctx.Request.PathBase); // /api
        await next(ctx);
    });
    apiApp.MapGet("/users/{id}", (int id) => id);
});

Dallanma desenlerini birleştirme

Gerçek uygulamalar katmanlı işlem hatları oluşturmak için Map, UseWhen ve kısa devre işlemlerini birleştirir: herkese açık yollar hafiftir, API yollarında kimlik doğrulama vardır, yönetici yollarında ek denetimler bulunur.

// Public area — no auth
app.Map("/public", pub =>
{
    pub.MapGet("/health", () => "OK");
    pub.MapGet("/docs",   () => "Documentation");
});

// API area — full auth + rate limiting
app.Map("/api", api =>
{
    api.UseAuthentication();
    api.UseAuthorization();
    api.UseRateLimiter();
    api.MapControllers();
});

// Admin area — require admin role
app.Map("/admin", admin =>
{
    admin.UseAuthentication();
    admin.UseAuthorization();
    admin.MapControllers().RequireAuthorization("AdminPolicy");
});

Gerçek dünya: A/B sınaması ara yazılımı

A/B sınaması ara yazılımı, uç nokta kodunu değiştirmeden istekleri bir çerez veya üst bilgiye göre farklı işleyicilere yönlendirir.

app.UseWhen(
    ctx => ctx.Request.Cookies.TryGetValue("ab-group", out var g) && g == "B",
    betaApp =>
    {
        betaApp.Use(async (ctx, next) =>
        {
            ctx.Items["IsGroupB"] = true;
            await next(ctx);
        });
    });

// Endpoint reads the flag:
app.MapGet("/products", (HttpContext ctx, ProductService svc) =>
{
    bool isB = ctx.Items.ContainsKey("IsGroupB");
    return isB ? svc.GetNewLayoutAsync() : svc.GetOldLayoutAsync();
});

Kısa sınama

MapWhen ile UseWhen arasındaki temel fark nedir?

Özet: Kısa devre ve dallanma

Ana çıkarımlar:

  • Map: yola göre kalıcı dal (yeniden katılım yok)
  • MapWhen: koşul ifadesine göre kalıcı dal
  • UseWhen: ana işlem hattına yeniden katılan koşullu dal
  • Kısa devre: next çağrısını yapmayın, yanıtı yazıp dönün
  • ShortCircuit() (.NET 8): bildirimsel, iyileştirilmiş sonlandırıcı uç noktalar
  • Katmanlı işlem hatları oluşturmak için dallanmayı birleştirin: herkese açık / API / yönetici

Sıkça Sorulan Sorular

“Kısa Devreye Alma ve Dallanma” dersi ücretsiz mi?

Evet — “Kısa Devreye Alma ve Dallanma” 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.

“Kısa Devreye Alma ve Dallanma” dersinde ne öğreneceğim?

İstek koşullarına göre işlem hattını dallandırmak veya sonlandırmak için MapWhen, UseWhen ve terminal ara yazılımı kullanın. 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.

“Kısa Devreye Alma ve Dallanma” 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. ASP.NET Core İşlem Hattına Genel Bakış
  2. Özel Ara Yazılım Yazma
  3. Kısa Devreye Alma ve Dallanma
  4. Ara Yazılım Sıralaması ve Yerleşik Ara Yazılım
← C# Academy Sayfasına Dön