ASP.NET MVC’de alternatif URL Routing tanımlaması

Bir MVC 3 projesi yarattığınız zaman karşınıza çıkan default URL Routing tanımlaması şu şekilde olacaktır:

            routes.MapRoute(

                "Default", // Route name

                "{controller}/{action}/{id}", // URL with parameters

                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

            );

Bu tanımlamada anlaşılacağı gibi, web uygulamanıza gelen isteklerde URL üç bölüme ayrılmış olacaktır. Örneğin, /haber/detay/5848 şeklinde bir istek geldiği zaman yapı şu şekildedir:

Controller: haber (haberController.cs)
Action Method: detay
ID: 5848

Peki ya uygulamanızın yapısı birden fazla parametre alıyorsa? Örneğin, web uygulamanızda, 22-05-2012 tarihine ait spor haberlerini listeleyecek bir yapınız varsa, MVC kullanarak şu şekilde bir URL yapısına sahip olmak isteyebilirsiniz:

/haberler/listele/spor/22-05-2012

Bu durumda, şu şekilde bir MVC dizaynına ihtiyacınız olacaktır:

Controller: haberler (haberlerController.cs)
Action Method: listele
Parametreler: spor (kategori) ve 22-05-2012 (tarih).

Mevcut/default URL routing bu şekildeki bir URL tanımlamasını ancak, ilk parametre id olarak ve ikinci parametre querystring olarak gönderilirse karşılayabilir. Örneğin, mevcut URL Routing kuralına göre bu istek şu şekilde yapılmalıdır:

/haberler/listele/spor?tarih=22-05-2012

Bu URL yapısını /haberler/listele/spor/22-05-2012 şeklinde oluşturmak için aşağıdaki gibi URL Routing ve Action Method tanımlaması yapabilirsiniz:

            routes.MapRoute(

                "Haber listele yönlendirmesi",

                "haberler/{action}/{kategori}/{tarih}",

                new { controller = "haberler", action = "Index", kategori = UrlParameter.Optional, tarih = UrlParameter.Optional }

            );

Yukarıdaki URL Routing tanımlamasına göre, /haberler/listele/spor/22-05-2012 şeklinde gelen bir istek, yukarıdaki kurala uyacaktır. Bu kuralın, default URL Routing kuralının üstüne yazılması gerekmektedir.

Controller class’ımız (haberlerController.cs) içinde yazacağımız listele action method’u ise aşağıdaki gibi olabilir:

        public ActionResult listele(string kategori, string tarih)

        {

            ViewBag.kategori = kategori;

            ViewBag.tarih = tarih;

            return View();

        }

Örnek olması açısından action method’un yaptığı iş sadece ilgili view bileşenine kategori ve tarih bilgisini ViewBag dinamik değişkenleri içinde taşımak olarak gösterildi. Burada önemli olan kısım, action method’un aldığı değişkenler ve değişken isimleridir. Buradaki değişken isimlerinin URL Routing tanımlamasındaki değişken isimleri ile aynı olduğuna dikkat ediniz. Bu şekilde bir tanımlama yapıldığı zaman /haberler/listele/ekonomi/22-05-2012 isteği geldiği zaman tanımlamalar şu şekilde olacaktır:

Controller: haberler (haberlerController.cs)
Action Method: listele
Kategori: ekonomi
Tarih: 22-05-2012

--
Ahmet Mithat Bostancı