MVC Routing İşlemleri

Mvc Routing Mvc Route işlemleri Mvc RouteMap

0 5,764

MVC Routing

Bu makalemizde MVC Routing kavramını ele alacağız. ASP.Net üzerinde route işlemi sunucuda fiziksel dosya (.aspx) üzerinden direkt olarak gerçekleştirilirdi, MVC’de ise bu işlem için Controller sınıfından Action metot çağrısı yapmaktadır. Peki MVC Routing aslında ne yapıyor ? Yaptığı iş istemci (client) üzerinden sunucu (server) tarafına gönderilen isteği ilgili Controller metoduna yönlendirmektir. Yapılan bu yönlendirme ile kullanıcının gözüne hoş gelecek bir URL oluşur ve çeşitli güvenlik açıklarından da kaçınmış oluruz.Bildiğiniz gibi MVC (Model View Controller) yapısında kullanıcının erişmek istediği sayfa, yapılan istek sonrası ilgili Controller’ın  Action metodu üzerinden dönen View ile gerçekleşiyor. Bazı View’ların isimleri kullanıcı için uygun bir yapıda olmayabilir.Estetik konusunu bir kenara bıraksak bile direkt olarak Controller metot ismini adres çubuğunda görmek riskli bir durumdur. Neyse ki MVC Routing ile bu gibi durumlara önlem alabiliyoruz.

Örneklerimize geçmeden önce Mvc Routing makalemizde göz atacağımız başlıkları listeleyelim.

  • App_Start ve RouteConfig.cs
  • Route Ekleme
  • Parametreli Route Ekleme
  • Route Filter
    • Http Filter
    • Regex Filter
    • RouteConstraint Filter

Örneklerimiz için bilisimIOMVCRouting adında bir proje oluşturalım.  Ben projeyi oluştururken ekranda gelen şablonlardan Empty olanı seçtim.  Proje oluştururken farklı seçenekler üzerinden belli başlı özelliklerin bulunduğu projeleri otomatik olarak oluşturabilirsiniz.
Şimdi Controller klasörü üzerinden Add > New ile HomeController adında bir sınıf ekliyoruz. Daha sonra View klasörü içine Controller ismimiz ile bir klasör ekleyip içine Index adında bir View ekliyoruz.

AppStart ve RouteConfig sınıfı

App_Start klasörü programımızla ilgili genel ayarlara yönelik sınıfların bulunduğu klasördür. App_Start içinde RouteConfig.cs sınıfı otomatik olarak oluşturulur. Sınıf controller sınıflarını dinleyerek herhangi bir controller metot çağrısı olduğunda devreye girer ve ilgili yönlendirmeyi yapar.

yukarıda RouteConfig sınıfının ilk halini görüyoruz.  Hali hazırda eklenen dosya üzerinde herhangi bir değişiklik yapmazsak site içerisindeki tüm adres(URL)ler eklenen MapRoute kurallarına göre işletilir.

Projemizi çalıştırıp oluşran URL bilgisine baktığımızda http://localhost:22067/Home/Index veya http://localhost:22067/ şeklinde bir adres göreceğiz.

Mvc Routing işlemleri
Mvc Routing İşlemleri

Config sınıfımız içinde herhangi bir değişiklik yapmadığımız için istemciden gelen isteği default olarak değerlendirdi ve belirlenen düzene göre ( url : “{controller}/{action}/{id}”) bir URL oluşturdu.

Not : Konuyu daha rahat örneklemek için projeye View – Controller ve Model eklemeleri yapıyorum. Routing  kapsamından çok fazla uzaklaşmamak için bu değişiklikleri burada anlatmadım.

Route Ekleme

Yeni Route eklemeden önce projemizdeki Article view URL’i görelim.

Mvc Routing işlemleri
Mvc Routing işlemleri

 

Yeni sayfa üzerine yönlendirme işleminde standart dışına çıkıp kullanıcı dostu
(User-Friendly) bir URL göstermek istiyorsak RouteConfig sınıfımızı aşağıdaki gibi değiştiriyoruz. Burada dikkat etmemiz gereken ilk şey default mapRoute tanımının her zaman en altta olmasıdır.

 

Mvc Routing işlemleri
MVC Routing

Parametreli Route Tanımı

Parametreli Route tanımına geçmeden önce ArticleController ‘a yeni bir View ve Controller metodu eklemeliyiz. Bu Action ile beklediğimiz gönderdiğimiz parametreye göre .Net kategori makalelerinin ekranda görünmesi.

Mvc Routing işlemleri
MVC Routing With Parameters

Yukarıda göründüğü gibi .Net makaleleri ekranda görüntülendi fakat adres çubuğunda metot adımız parametre adı parametre değeri gibi tüm değerler dışarıya açılmış oldu. şimdi yeni bir Route ekleyelim.

Action Method

 

Mvc Routing işlemleri
Mvc Routing With Parameters

Route Filter – RouteConstraint Filter

Routing yaparken bazı senaryolarda çeşitli kısıtlamalar kullanmamız gerekebilir. Örneğin GetArticlesByCategory ile listelediğimiz kategoriler için bir parametre kullanmıştık. Ardes çubugunda parametremizi 1 ,2 ,3 şeklinde Int değerlerden oluşturduk. Fakat bununla ilgili bir kısıtlama yapmadık. Adres çubuğundaki parametreye /bilisimIO ‘ da yazabiliriz. Bu istenmeyen durumu engellemek için regex’den faydalanacağız. Dikkat ettiyseniz şu ana kadar istek yaptığımız her sayfa için bir ActionResult metot tanımlamıştık.Yani her ActionResult ‘ın bir View cshtml dosyası vardı. Şimdi tanımlayacağımız metot için  ayrı bir View sayfası olmayacak. ActionResult’ı GetArticleByCategory sayfasına yönlendireceğiz.

ActionResult

GetArcitleByCategoryPosted metodu ile GetArticleByCategory.cshtml içine istediğimiz veriyi gönderdik.

HttpPost HttpGet Filter

HttpPost ve HttpGet attribute’leri metotlar için kullanılır. Gelen isteğin Post veya Get durumuna göre filtre uygulamış olur.

ActionResult

 

H.Burak Karadağ

Referans
msdn Routing

Email adresiniz yayınlanmayacaktır.