ASP.NET Core hattı
Routing ve endpoint seçimi
Bir URL’nin hangi koda gideceğine nasıl karar verilir ve rota kısıtları neden önemlidir?
Kavramı anlayalım
Routing, gelen isteğin yolunu ve metodunu tanımlı rota şablonlarıyla karşılaştırır ve bir endpoint seçer. Endpoint; çalıştırılacak kod ile ona eklenmiş özelliklerin (metadata) birleşimidir: [Authorize], [EnableRateLimiting], [AllowAnonymous] gibi. Seçim yapıldıktan sonraki middleware’ler bu bilgileri okuyabilir; yetkilendirme ve hız sınırının routing’den sonra gelmesinin nedeni budur.
Şablonlar parametre içerebilir: “api/posts/{slug}” yolundaki slug değeri yakalanır. Kısıtlar şablonu daraltır: {id:int} yalnız tam sayıyla eşleşir, {slug:minlength(3)} kısa değerleri dışarıda bırakır. Kısıtlar doğrulama yerine geçmez; amaçları doğru endpoint’i seçmektir. Eşleşme yoksa routing 404 üretir.
Birden fazla şablon eşleşebildiğinde ASP.NET Core en belirgin olanı seçer: sabit bir parça, parametreden daha önceliklidir. “api/posts/latest” ile “api/posts/{slug}” birlikte varsa ‘latest’ ilk şablona gider. Belirsiz kalan iki eşit eşleşme ise çalışma zamanında hata verir.
Yanlış endpoint seçimi, yanlış yetki kuralının uygulanması demektir.
Rota kısıtlarını girdi doğrulaması sanıp ayrıca doğrulama yapmamak.
Aynı konu. Üç farklı derinlik.
[Route("api/posts")]
public class PostsController : ControllerBase
{
[HttpGet("{slug}")] public IActionResult Get(string slug) => … // GET api/posts/ilk-yazi
[HttpGet] public IActionResult List() => … // GET api/posts
}Attribute routing ile şablon controller ve metot üzerine yazılır.
Bu sayfa gerçek bir sunucuya veya veritabanına bağlanmaz. Kod örnekleri .NET 8, Next.js ve SQL Server için temsilîdir; süreler simülasyondaki örnek değerlerdir, ölçüm değildir. Örnekleri yalnız kendi geliştirme ortamında dene; gerçek bağlantı dizesi, token veya parola paylaşma.
Önce kendin dene.
‘GET api/posts/{slug}’ ve ‘GET api/posts/drafts’ var. drafts uç noktası [Authorize(Roles="Admin")] ile korunuyor. Biri /api/posts/drafts istediğinde hangi endpoint seçilir ve neden önemli?
Çözümü ve açıklamasını göster
Sabit parça daha belirgin olduğu için 'drafts' endpoint’i seçilir ve Admin şartı uygulanır.
Şablon belirsiz olsaydı veya drafts bir slug gibi ele alınsaydı,
koruma devreye girmeyebilirdi.Yetki kuralları endpoint’e bağlıdır; hangi endpoint’in seçildiği güvenliğin bir parçasıdır.