0Pricing
C# Academy · Ders

Yol Grupları, Parametreler ve Doğrulama

MapGroup ile uç noktaları düzenleyin, yol/sorgu/gövde parametrelerini bağlayın ve veri ek açıklamalarıyla doğrulayın.

Yol Grupları, Parametreler ve Doğrulama, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 2. 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.

Düzenleme için Rota Grupları

MapGroup() (.NET 7'de kullanıma sunulmuştur), ilişkili uç noktaları ortak bir ön ek altında gruplamanıza ve ara yazılım, kimlik doğrulama ilkeleri ve etiketler gibi ortak yapılandırmaları her uç noktada tekrarlamadan uygulamanıza olanak tanır.

Rota Grubu Oluşturma

app.MapGroup("/api/products") çağrısını yapın ve ardından döndürülen grup üzerinde uç noktaları eşleyin. Ön ek, tüm rotaların başına otomatik olarak eklenir.

var products = app.MapGroup("/api/products").WithTags("Products");

products.MapGet("/",     GetAll);
products.MapGet("/{id}", GetById);
products.MapPost("/",    Create);
products.MapPut("/{id}", Update);
products.MapDelete("/{id}", Delete);
// Routes: /api/products, /api/products/{id}

Bir Gruba Kimlik Doğrulama Uygulama

Tüm uç noktaları tek seferde korumak için grup üzerinde RequireAuthorization() kullanın. Tek tek uç noktalar yine de AllowAnonymous() ile bu davranışı geçersiz kılabilir.

var adminGroup = app.MapGroup("/admin")
    .RequireAuthorization("AdminPolicy")
    .WithTags("Admin");

adminGroup.MapGet("/users",    GetAllUsers);
adminGroup.MapDelete("/users/{id}", DeleteUser);

// This one inside the group opts out
adminGroup.MapGet("/status", () => "OK").AllowAnonymous();

Rota Parametresi Kısıtlamaları

Rota parametrelerini tür desenleriyle kısıtlayın. Yönlendirici, eşleşmeyen istekleri reddeder ve otomatik olarak 404 döndürür.

// Only matches numeric IDs
app.MapGet("/products/{id:int}", (int id) => id);

// GUID constraint
app.MapGet("/orders/{orderId:guid}", (Guid orderId) => orderId);

// Length constraint
app.MapGet("/codes/{code:length(6)}", (string code) => code);

// Min value
app.MapGet("/page/{page:min(1)}", (int page) => page);

Farklı Kaynaklardan Bağlama

Parametreler, öznitelikler kullanılarak farklı kaynaklardan bağlanır. Varsayılan olarak basit türler rota veya sorgudan, karmaşık türler ise gövdeden alınır.

app.MapPost("/search", (
    [FromQuery] string q,
    [FromQuery] int page,
    [FromHeader(Name = "X-Api-Version")] string version,
    [FromBody] SearchFilters filters,
    AppDbContext db) =>
{
    // q and page from query string
    // version from request header
    // filters from JSON body
    return Results.Ok();
});

TryParse ile Özel Parametre Bağlama

Rota veya sorgu parametresi olarak kullanılan özel türler için statik bir TryParse metodu uygulayın. Çatı, dize değerini ayrıştırmak için bu metodu otomatik olarak çağırır.

public record ProductFilter(string? Category, decimal? MinPrice)
{
    public static bool TryParse(string value, out ProductFilter result)
    {
        var parts = value.Split(':');
        result = new ProductFilter(
            parts.Length > 0 ? parts[0] : null,
            parts.Length > 1 && decimal.TryParse(parts[1], out var p) ? p : null);
        return true;
    }
}

// Usage: GET /products?filter=Electronics:50
app.MapGet("/products", ([FromQuery] ProductFilter filter) => filter);

DataAnnotations Doğrulaması

İstek DTO'larınızı data annotation öznitelikleriyle süsleyin. Minimal API'lerde doğrulamayı tetiklemek için IValidatableObject arayüzünü veya bir doğrulama filtresini kullanın.

using System.ComponentModel.DataAnnotations;

record CreateProductRequest
{
    [Required, MaxLength(200)]
    public string Name { get; init; } = "";

    [Range(0.01, 999999)]
    public decimal Price { get; init; }

    [Range(0, int.MaxValue)]
    public int Stock { get; init; }
}

Doğrulama için Uç Nokta Filtreleri

Uç nokta filtreleri işleyiciden önce veya sonra çalışır. Model doğrulaması eklemek ve geçersiz istekleri iş mantığınıza ulaşmadan reddetmek için bunları kullanın.

app.MapPost("/products", CreateProduct)
   .AddEndpointFilter(async (ctx, next) =>
   {
       var req = ctx.GetArgument<CreateProductRequest>(0);
       var errors = new List<ValidationResult>();
       if (!Validator.TryValidateObject(req,
               new ValidationContext(req), errors, true))
       {
           return Results.ValidationProblem(
               errors.ToDictionary(e => e.MemberNames.First(),
                                   e => new[] { e.ErrorMessage! }));
       }
       return await next(ctx);
   });

FluentValidation Entegrasyonu

Karmaşık doğrulama kuralları için FluentValidation'ı, Minimal API'lerde otomatik doğrulama sağlayan SharpGrip.FluentValidation.AutoValidation.Endpoints paketiyle kullanın.

public class CreateProductValidator : AbstractValidator<CreateProductRequest>
{
    public CreateProductValidator()
    {
        RuleFor(x => x.Name).NotEmpty().MaximumLength(200);
        RuleFor(x => x.Price).GreaterThan(0);
        RuleFor(x => x.Stock).GreaterThanOrEqualTo(0);
    }
}

builder.Services.AddFluentValidationAutoValidation();
builder.Services.AddValidatorsFromAssemblyContaining<CreateProductValidator>();

İç İçe Rota Grupları

Rota grupları, satır kalemleri içeren siparişler gibi hiyerarşik kaynakları modellemek için iç içe yerleştirilebilir.

var api = app.MapGroup("/api").RequireAuthorization();

var orders = api.MapGroup("/orders");
orders.MapGet("/", GetAllOrders);
orders.MapGet("/{id:int}", GetOrder);

// Nested: /api/orders/{orderId}/lines
var lines = orders.MapGroup("/{orderId:int}/lines");
lines.MapGet("/",        GetOrderLines);
lines.MapPost("/",       AddOrderLine);
lines.MapDelete("/{id}", RemoveOrderLine);

Gerçek Dünya: Sürümlendirilmiş API Grubu

Kimlik doğrulama veya etiket yapılandırmasını çoğaltmadan yan yana sürümlendirmeyi desteklemek için uç noktaları API sürümüne göre gruplandırın.

var v1 = app.MapGroup("/api/v1")
    .RequireAuthorization()
    .WithTags("v1");

var v2 = app.MapGroup("/api/v2")
    .RequireAuthorization()
    .WithTags("v2");

v1.MapGet("/products", GetProductsV1);
v2.MapGet("/products", GetProductsV2); // richer response

Hızlı Kontrol

Minimal API'lerde MapGroup() hangi amaçla kullanılır?

Özet: Rota Grupları, Parametreler ve Doğrulama

Önemli çıkarımlar:

  • MapGroup(): birden çok uç noktada ön eki ve yapılandırmayı paylaşır
  • Rota kısıtlamaları (:int, :guid, :min) eşleşmeyen rotaları otomatik olarak reddeder
  • Açık bağlama kaynağı belirtmek için [FromQuery], [FromHeader], [FromBody]
  • Otomatik rota veya sorgu bağlama için özel türlerde TryParse uygulayın
  • Uç nokta filtreleri, doğrulama gibi ortak kesen konuları etkinleştirir

Sıkça Sorulan Sorular

“Yol Grupları, Parametreler ve Doğrulama” dersi ücretsiz mi?

Evet — “Yol Grupları, Parametreler ve Doğrulama” 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.

“Yol Grupları, Parametreler ve Doğrulama” dersinde ne öğreneceğim?

MapGroup ile uç noktaları düzenleyin, yol/sorgu/gövde parametrelerini bağlayın ve veri ek açıklamalarıyla doğrulayı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 2. dersidir.

“Yol Grupları, Parametreler ve Doğrulama” 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