C#nedir?com
 
YAZAR HAKKINDA
Doğuhan Aydeniz
Doğuhan Aydeniz
http://www.doguhanaydeniz.com
İletişme geçmek için tıklayın.
6 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: {*url} Asp.NET Mvc Controller Parametreleri Global.asax MapRoute MapRoute eklemek Mvc MVC Routing Mvc UrlRewrite RouteCollection Routing Routing Default Route Routing Nedir UrlRewrite Kodlama Doğuhan Aydeniz
 
YAZI HAKKINDA
Türü : Serbest Köşe (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : Kodlama
Yayınlanma Tarihi : 3.12.2009
Okunma Sayısı : 43987
Yorum Sayısı : 3     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer 'in Blogu
Conda install environment.yml Package 23.2.2020
Turhal Temizer 'in Blogu
Mac OS/X Removing CUDA 23.2.2020
Burak Selim Şenyurt
Sekiz Saatlik Sonsuz Döngü 23.2.2020
Burak Selim Şenyurt
Switch Case Kullanmadan Kod Yazılabilir mi? 23.2.2020
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ASP.NET MVC - Routing Nedir ve Nasıl Kullanılır?
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon

Merhaba arkadaşlar bu yazımda MVC mimarisinde Routing (Yönlendirme) nedir ve kendi route tanımlamalarımızı nasıl yapmamız gerektiğini inceleyeceğiz.

Ama önce Routing neydi bir hatırlayalım. ASP.NET Web Form kültüründe URL Rewrite, yani kullanıcının ve arama motorlarının sizin sitenizin URL'sinde anlamlı ifadeler görmesi için Handler yazarak konuya müdahele edebiliyorduk. Ancak her ne kadar iş görsede bu işlemler çok kolay değil ve gereksiz vakit kaybı yaratmaktaydı. 

Microsoft MVC mimarisinde, Routing adı altında yeni bir düzenleme getirdi ve bize bu anlamda büyük katkıda bulundu.

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

RegisterRoutes metodunun içinde hali hazırda yer alan bir adet tanımlama göreceksiniz.

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

Yukarıda MapRoute metodu kullanarak yeni route tanımlaması yaptık. Yanlarında ingilizce açıklaması yazıyor ama yine de biz bir inceleyelim.

-> routes nesnesi RouteCollection sınıfını temsil etmektedir.
-> MapRoute metodu URL'nizin şemasını ve bu URL şemasında hangi controller ve action'ın çalışacağı bilgisini tanımladığınız metotdur.

routes.MapRoute(
"Route'unuza vereceğiniz isimdir. Tekil(unique) olmak zorundadır",
"Bu Map Route'un hangi URL şemasına göre çalışacağı bilgisidir",
new { controller = "Hangi Controller'ın çalışacağını işaret eder. Örn. HaberController çalışacak ise Haber yazmanız gerekmektedir", action = "İşaret edilen Controller ın hangi action metodunun çalışacağını işaret eder."});

Projenizi geliştirmeye başladığınız zaman ihtiyaç doğrultusunda yeni route'lar tanımlamanız gerekecektir.

Örnek bir senaryo ile buna bir açıklık getirelim. Sitenizde haber yayınlıyorsunuz, dolayısıyla neye ihtiyaç var bir listeleme sayfası ve bir de detay sayfasına.

View klasörüne Haber adında yeni bir dizin ekleyelim ve içine Listele.aspx, Oku.aspx MVC View'larını ekleyelim. View'larımızı ekledikten sonra bunları karşılayacak Controller sınıfımızı da HaberController.cs olarak projemizde yer alan Controller dizinine ekleyelim. ve içerisindeki kodları aşağıdaki şekilde düzenleyelim.

public class HaberController : Controller
{
      public ActionResult Listele()
      {
           //Listeleme kodları yazılacak
           return View("Listele");
      }

      public ActionResult Detay(string HaberId)
      {
           //Detay kodları yazılacak
           return View("Detay");
      }
}


Dikkatinizi çektiyse Detay metodu HaberId adlı string bir parametre almaktadır. Aşağıda bu paremetrenin nereden geldiğini anlayacaksınız.

Şimdi Haber dizinini ve View'larını çalıştırabilmek için yeni bir Route tanımı yapacağız. Global.asax dosyamıza gidiyoruz ve aşağıdaki gibi düzenliyoruz.

public static void RegisterRoutes(RouteCollection routes)
{
       routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

       routes.MapRoute(
             "HaberListeleme",
             "Haber",
             new { controller = "Haber", action = "Listele" }
       );

       routes.MapRoute(
            "HaberDetay",
            "Haber/{id}",
            new { controller = "Haber", action = "Detay" }
        );

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

Yukarıda gördüğünüz gibi Default route'a ek olarak iki tane daha yeni route tanımladım. Bunlardan biri Listeleme için diğeri ise Detay için. Detay'ı tanımladığımız route'un ikinci paremetresinde "Haber/{id}" yazdığına dikkatinizi çekiyorum az önce HaberController'ın Detay metodunun aldığı HaberId isimli parametreden bahsetmiştik işte bu URL'ye, "Haber/" dedikten sonra yazılmışsa bu parametreye yüklenmektedir.

Yani url'mizde şöyle yazıyor ise:
http://www.doguhanaydeniz.com/Haber/345

işte buradaki 345 rakamı parametre olarak gönderilecektir.

Eğer route tanımlamamızı şu şekilde yaparsak :

routes.MapRoute(
      "HaberDetay",
      "Haber/{*Id}",
      new { controller = "Haber", action = "Detay" }
);

yani parametre adımızın yanına * karakteri koyarak yazarsak Haber/ url sekmesinden sonra ne yazarsa yazsın Controller'daki Detay metodunun ilgili parametresine gönderilecektir.

Örneğin:
http://www.doguhanaydeniz.com/Haber/Turkiye/Guncel/34389

gibi bir URL istenirse Turkiye/Guncel/34389 parametre olarak gönderilecektir.

Route tanımlarken dikkat etmeniz gereken püf noktalardan birisi de yeni tanımladığınız route'u, default route'un üzerine tanımlamak zorunda olmanızdır. Diğer türlü denediğinizde hatalı çalıştığını farkedeceksiniz. Ki bunu anlamak için baya bir mesai harcamış biri olarak buna çok dikkat etmenizi öneririm.

Artık projemizi build edip çalıştırabiliriz.

Makale:
ASP.NET MVC - Routing Nedir ve Nasıl Kullanılır? Kodlama Doğuhan Aydeniz
  • Yazılan Yorumlar
  • Yorum Yaz
HAZ
19
2010
global.asax 'da sürekli URL yapısını farklı sayfalar için tekrarlıyoruz.Bunu nasıl metodlaştırabiliriz.Proje buyudukçe karışık bir global.asax olacak. routes.MapRoute 'dan bahsediyorum.teşekkurler. routes.MapRoute( "HaberListeleme", "Haber", new { controller = "Haber", action = "Listele" } ); routes.MapRoute( "HaberDetay", "Haber/{id}", new { controller = "Haber", action = "Detay" } );
OCA
30
2010
Merhabalar Doğuhan Bey, öncelikle elinize sağlık. Benim karşılaştığım bir problem var. Söylediğiniz şekilde yaptım yönlendirmeleri. Localde herşey düzgün çalışmasına rağmen siteyi publish ettiğimde internette Index dışındaki menülerim çalışmıyor. Bir internet sitesinden çözüm buldum fakat içime sinmedi. Bulduğum çözüm şu şekilde; routes.MapRoute( "Default", // Route name "{controller}.mvc/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); routes.MapRoute( "Root", "", new { controller = "Home", action = "Index", id = "" } ); Bu şekilde yaptığımda diğer menülerimde çalışıyor fakat url'de şu şekilde görünüyor. www.deneme.com/Home.mvc/About mvc uzantısının görünmesini istemiyorum. Bu konuda bir çözümünüz var mıdır acaba?
OCA
30
2010
Merhabalar Doğuhan Bey, öncelikle elinize sağlık. Benim karşılaştığım bir problem var. Söylediğiniz şekilde yaptım yönlendirmeleri. Localde herşey düzgün çalışmasına rağmen siteyi publish ettiğimde internette Index dışındaki menülerim çalışmıyor. Bir internet sitesinden çözüm buldum fakat içime sinmedi. Bulduğum çözüm şu şekilde; routes.MapRoute( "Default", // Route name "{controller}.mvc/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); routes.MapRoute( "Root", "", new { controller = "Home", action = "Index", id = "" } ); Bu şekilde yaptığımda diğer menülerimde çalışıyor fakat url'de şu şekilde görünüyor. www.deneme.com/Home.mvc/About mvc uzantısının görünmesini istemiyorum. Bu konuda bir çözümünüz var mıdır acaba?
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor