by

ASP.Net MVC Custom Route

Son zamanlarda uğraştıklarımın başında [ASP.Net MVC](http://tr.wikipedia.org/wiki/ASP.NET_MVC_Framework) geliyor. MVC , açılımı Model-View-Controller olan bir örüntüdür.

***Model*** = Temel anlamıyla uygulama içinde kullanılacak olan veriler ile haşır neşir olduğumuz kısım oluyor.

***View*** = İsminden de anlaşılacağı üzere , uygulamanın kullanıcı arayüzü diyebiliriz.

***Controller*** = Model’daki verileri işlediğimiz , kullanıcı etkileşimi sonucu gerekli işlemleri yerine getirdiğimiz ve View’a gerekli verileri ilettiğimiz kısımdır.

– – – – – –

Basit düzeydeki giriş bilgilerinden sonra, anlatmak istediğim kısıma gelelim. MVC’de Özel Rota(Custom Route) yazmaktan bahsedeceğim.

ASP.Net MVC ile birlikte gelen varsayılan rota şu şekildedir:

routes.MapRoute( “Default”, // Route name “{controller}/{action}/{id}”, // URL with parameters new { controller = “Home”, action = “Index”, id = UrlParameter.Optional } // Parameter defaults );

 

Örnek bir senaryoda bu bilgisini inceleyecek olursak; farzedelim ki bir araba sitesi yapacağız.

Controller: Araba
Action: Detay
id: Cadillac

Cadillac marka otomobilleri listelemek istiyoruz. Varsayılan rotaya göre bu işlem için URL miz şu şekilde olacaktır:

**…/Araba/Detay/Cadillac**

Fakat bu URL pek kullanıcı dostu değil çünkü kullanıcı sizin Araba controller’ı altında tanımlamış olduğunuz actionları bilmek zorunda değildir. Fakat bunu …/Araba/Cadillac şeklinde yapacak olursanız bu URL daha kullanıcı dostu olacaktır.

Bu işlem mevcut rotanın yanına ek rota tanımlayarak gerçekleştirilir. Bunu da ASP.Net MVC projemizin altında bulunan “Global.asax”  dosyasını değiştirerek yapıyoruz. Bu dosyayı açtığınız zaman varsayılan rotaya ait kod kesiminin RegisterRoutes methodu altında olduğunu farkedeceksiniz. Biz de yeni rotamızı bu methodun içinde tanımlayacağız.

routes.MapRoute( “Araba”, // Route name “Araba/{id}”, // URL with parameters new { controller = “Araba”, action = “Detay” } // Parameter defaults );

Burada dikkat edilmesi gereken en önemli husus , tanımlayacağımız rotanın , varsayılan rota tanımlamamız gerektiğidir. Çünkü aksi durumda varsayılan rota , tanımlayacağımız rotayı yoksayacaktır.

Bu durumda “*Global.asax*” dosyasında bulunan ***RegisterRoutes*** methodunun son şekli aşağıdaki gibi olacaktır.

public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); routes.MapRoute( “Araba”, // Route name “Araba/{id}”, // URL with parameters new { controller = “Araba”, action = “Detay” } ); routes.MapRoute( “Default”, // Route name “{controller}/{action}/{id}”, // URL with parameters new { controller = “Home”, action = “Index”, id = UrlParameter.Optional } ); }