Giriş
ASP.NET Core, dinamik web uygulamaları oluşturmak için güçlü bir framework’tür. Bu makalede, ASP.NET Core’un yönlendirme mekanizmasının temellerini inceleyeceğiz. Yönlendirme, gelen HTTP isteklerini doğru denetleyicilere veya uç noktalara yönlendirmek için kullanılır. Odak anahtar kelimemiz ASP.NET Core Yönlendirme olacak.
Routing Nedir?
Routing, türkçe kelime anlamı olarak yönlendirme, kullanıcı isteklerinin doğru denetleyici veya uç noktaya yönlendirilmesini sağlar. ASP.NET Core’da yönlendirme, Konvansiyonel Yönlendirme ve Attribute Yönlendirme olmak üzere iki ana şekilde yapılandırılabilir.
Konvansiyonel Routing
Konvansiyonel routing, Startup.cs
dosyasında tanımlanır ve önceden tanımlanmış URL desenlerine dayanır. Bu yöntem, belirli kalıplara uyan URL’lerin belirli denetleyici ve eylemlere yönlendirilmesini sağlar.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
Attribute Routing
Attribute routing, doğrudan denetleyiciler ve eylemler üzerinde tanımlanır, daha esnek ve okunabilir bir yönlendirme yapısı sunar.
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet("{id}")]
public IActionResult GetProduct(int id)
{
//...
}
}
Middleware and Endpoint Routing
ASP.NET Core, yönlendirme işlemini middleware kullanarak gerçekleştirir. UseRouting ve UseEndpoints
middleware bileşenleri, istekleri doğru uç noktaya yönlendirir.
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
Route Kısıtlamaları ve Özel Route İşleyicileri
Route kısıtlamaları, belirli kriterlere uyan URL’lerin işlenmesini sağlar. Özel route işleyicileri ise daha karmaşık yönlendirme senaryoları için kullanılır.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "productRoute",
pattern: "products/{category}/{id:int:min(1)}",
defaults: new { controller = "Products", action = "Details" });
});
Challenge
ASP.NET Core’da yönlendirme mekanizmasını anladığınıza göre, şimdi kendi uygulamanızda karmaşık bir yönlendirme senaryosu oluşturmayı deneyin. Dinamik parametreler ve rota kısıtlamaları içeren bir rota tanımlayın ve bu rota üzerinden veri çekmeyi deneyin.
Challenge Çözümü
İşte karmaşık bir yönlendirme senaryosu oluşturmak için bir örnek çözüm:
1. Karmaşık Bir Rota Tanımlama: Startup.cs
dosyanıza aşağıdaki rotayı ekleyin.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "productRoute",
pattern: "products/{category}/{id:int:min(1)}",
defaults: new { controller = "Products", action = "Details" });
});
2. Controller Action: ProductsController
adlı bir denetleyici oluşturun ve Details
eylemini ekleyin.
public class ProductsController : Controller
{
public IActionResult Details(string category, int id)
{
// Fetch product details based on category and id
var product = GetProduct(category, id);
if (product == null)
{
return NotFound();
}
return View(product);
}
private Product GetProduct(string category, int id)
{
// Logic to retrieve product from the database
// For demonstration, returning a mock product
return new Product { Id = id, Category = category, Name = "Sample Product" };
}
}
3. Route test et: Uygulamanızı çalıştırın ve /products/electronics/1
adresine gidin. Bu, ProductsController
içindeki Details
eylemine yönlendirilecek ve ürün detayları getirilecektir.
ASP.NET Core Routing Hakkında Sık Sorulan Sorular (SSS)
ASP.NET Core Routing nedir?
ASP.NET Core Yönlendirme, gelen HTTP isteklerini web uygulamasındaki uygun denetleyici eylemlerine veya uç noktalara yönlendiren bir mekanizmadır. URL’lerin denetleyicilere ve eylemlere nasıl eşleneceğini tanımlar.
ASP.NET Core’da bir route nasıl tanımlanır?
Rotalar, Startup.cs
dosyasında konvansiyonel yönlendirme kullanılarak veya denetleyiciler ve eylemler üzerinde attribute yönlendirme kullanılarak tanımlanabilir. Konvansiyonel yönlendirme önceden tanımlanmış bir URL deseni kullanır, attribute yönlendirme ise denetleyici yöntemleri üzerinde tanımlanır.
Konvansiyonel Routing ve Attribute Routing arasındaki fark nedir?
Konvansiyonel routing, Startup.cs
dosyasında tanımlanır ve önceden tanımlanmış desenler kullanır. Attribute routing, denetleyici eylemleri üzerinde tanımlanır ve daha esnek ve okunabilir bir yönlendirme yapısı sunar.
Middleware, ASP.NET Core Yönlendirme’de nasıl bir rol oynar?
Middleware bileşenleri, UseRouting
ve UseEndpoints
gibi, ASP.NET Core’da yönlendirme işlemini kurmak için kullanılır. Gelen istekleri işler ve yönlendirme yapılandırmasına göre uygun uç noktaya yönlendirir.
Route kısıtlamaları nedir?
Route kısıtlamaları, bir routeden gelen isteği eşleştirmesi için karşılaması gereken koşullardır. URL parametreleri için veri türlerini, değer aralıklarını ve diğer kriterleri zorlarlar.
Bir uygulamada birden fazla yönlendirme stratejisi kullanabilir misiniz?
Evet, ASP.NET Core, aynı uygulama içinde hem konvansiyonel hem de attribute yönlendirme kullanımını destekler. Bu, geliştiricilerin uygulamanın farklı bölümleri için en iyi yönlendirme stratejisini seçmelerine olanak tanır.
ASP.NET Core’da gerçek zamanlı web işlevselliği nasıl sağlanır?
ASP.NET Core, gerçek zamanlı web işlevselliğini sağlamak için SignalR kullanır. SignalR, sunucu ve istemci arasında çift yönlü iletişim sağlar, gerçek zamanlı güncellemeler ve etkileşimler için olanak tanır.
ASP.NET Core’da Endpoint Routing nedir?
Endpoint Routing, ASP.NET Core’da tanımlanan uç noktalara istekleri eşleştiren bir sistemdir. Yönlendirme yapılandırmasını middleware’den ayırarak yönlendirme işlemini daha esnek ve verimli hale getirir.
ASP.NET Core’da karmaşık yönlendirme senaryoları nasıl yapılandırılır?
Karmaşık yönlendirme senaryoları, dinamik parametreler ve kısıtlamalar içeren rota şablonları kullanılarak yapılandırılabilir. Özel rota işleyicileri de daha gelişmiş yönlendirme ihtiyaçları için kullanılabilir.
Results
#1. ASP.NET Core’da yönlendirmenin(routenin) temel amacı nedir?
#2. Konvansiyonel route genellikle hangi dosyada tanımlanır?
#3. Attribute yönlendirme nerede tanımlanır?
#4. ASP.NET Core’da routeyi etkinleştirmek için hangi middleware bileşenleri gereklidir?
#5. ASP.NET Core’da bir route kısıtlaması nedir?
#6. Bir denetleyici eyleminde [HttpGet(“{id:int:min(1)}”)] özniteliğinin amacı nedir?
#7. ASP.NET Core’da gerçek zamanlı web işlevselliği hangi özellik ile sağlanır?
Challenge Sorusu: Uygulamanızda /products/{category}/{id:int:min(1)} formatında URL’leri işleyen bir route oluşturun. Startup.cs dosyasında gerekli kodu yazın ve bu routeyi işleyen bir denetleyici oluşturun.
References
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-8.0
https://www.c-sharpcorner.com/article/routing-in-asp-net-core/
https://www.buraksenyurt.com/post/AspNet-Core-Routing-Mekanizmas%C4%B1n%C4%B1-Kavramak