14 Şubat 2019 Perşembe

ASP.NET MVC - Routing

ASP.NET MVC - Routing Nedir ve Nasıl Kullanılır?

Bu yazımda MVC mimarisinde Routing(Yönlendirme) nedir ve kendi route tanımlamalarımızı nasıl yapmamız gerektiğini inceleyeceğiz. ASP.NET MVC’de Routing aslında URI ile action’ın eşleştirilmesinden başka bir şey değildir. 

mvc route ile ilgili görsel sonucu

Routing kodlarına projemizin Global.asax dosyasında RegisterRoutes metodunun altında ulaşabilmekteyiz.

RegisterRoutes metodunun içinde aşağıdaki gibi hali hazırda yer alan bir adet tanımlama göreceksiniz. App_Start klasörün altında RouteConfig.cs classının içinde bulunmaktadır.
public static void RegisterRoutes(RouteCollection routes)
{
   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

   routes.MapRoute(
     name: "Default",//Route adı
     url: "{controller}/{action}/{id}", //URL Pattern
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Default route
   );
}
MapRoute metodu URL şemasını ve bu URL şemasında hangi controller ve action’ın çalışacağı bilgisini tanımladığınız metotdur. Name ile belirtilen alanda route ismi verilir unique olmak zorundadır. URL ile belirtilen alanda talep olarak gelecek URL yapısı. Default olarakta hangi controller ve hangi action metodunu kullanacağımızı belirtiyor.
Aşağıdaki resimde url adresinin parametreleri gösterilmiştir.
Mvc içinde yönlendirme
Aşağıdaki tablo url adreslerinin hangi Controller,Action ve Id lere karşılık geldiği örneklendirilmektedir.

URLControllerActionId
http://localhost/homeHomeControllerIndexnull
http://localhost/home/index/123HomeControllerIndex123
http://localhost/home/aboutHomeControllerAboutnull
http://localhost/home/contactHomeControllerContactnull
http://localhost/studentStudentControllerIndexnull
http://localhost/student/edit/123StudentControllerEdit123


Multiple (Çoklu)Routes 

Konunun başında  kendi Route tanımlamalarımızı yapacağımızdan bahsetmiştik şimdide bir örnek ile bunu açıklayalım.
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Student",
            url: "students/{id}",
            defaults: new { controller = "Student", action = "Index"}
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
} 
Yukarıdaki kodda gösterildiği gibi, Student route URL modeli , domainName / students ile başlayan herhangi bir URL'nin StudentController tarafından ele alınması gerektiğini belirten students/{id} şeklindedir. URL modelinde {action} belirtmediğimize dikkat edin, çünkü student ile başlayan her URL'nin her zaman StudentController'ın Index eylemini kullanmasını istiyoruz.

MVC framework her route u sırayla değerlendirir. İlk yapılandırılmış route ile başlar ve eğer gelen url route un  URL modelini karşılamıyorsa ikinci route u değerlendirir. Yukarıdaki örnekte, Route motoru önce Student rotasını değerlendirecek ve eğer gelen url  studens ile başlamazsa, yalnızca varsayılan rota olan ikinci rotayı dikkate alacaktır.

Route Constraints(Kısıtlayıcı)
Url parametrelerin değerine kısıtlama uygulanabilir.Örneğin aşağıdaki örnekte id değerini yalnızca sayı girilmesini sağlayabiliriz.(Kısıtlamayı Regular Expressions kullanarak yaptım. Reqular Expressions hakkında detaylı bilgiye buradan ulaşabilirsiniz.)
routes.MapRoute(
        name: "Student",
        url: "student/{id}/{name}/{standardId}",
        defaults: new { controller = "Student", action = "Index", id = UrlParameter.Optional, name = UrlParameter.Optional, standardId = UrlParameter.Optional },
        constraints: new { id = @"\d+" }//sadece numerik karakterler olabilir
    );
Bu makalemde anlatacaklarım bu kadar.Bir sonraki makalede görüşmek üzere.😇😊

Hiç yorum yok:

Yorum Gönder