Makale Özeti

Bu yazımızda MVC Framework 'te sıklıkla kullanılan Asp.Net Routing yapısını detayları ile incelemeye çalışıyoruz.

Makale

Custom Routing Oluşturma

MVC patterninin ile gelen en temel özelliklerinden biri olan Asp.Net Routingin temel olarak nasıl kullanılacağını detaylı olarak inceledik. Şimdi değineceğimiz konu ise bize sunulan Controller/Action/ID routing map ‘inin dışında harici bir routing ‘i nasıl oluşturacağımızdır.

Web uygulamaları geliştirirken kesinlikle sürekli olarak id parametresine göre işlem yapmayız. Başka bir yapı için başka bir parametre üzerinde de işlem yapabilmemiz mümkündür. Örneğin, makalelerin yayınlandığı bir topluluk sitesini düşünelim ve biz bu makaleleri id bazlı değil de tarih bazlı göstermek istiyoruz. Bu durumda MVC ‘nin bize varsayılan olarak sunduğu yapı işimize yaramayacaktır. Farklı çözümler üretmemiz gerekecektir. Bu durumda yapmamız gereken kendimize ayrı bir route map oluşturmak olacaktır.

Bu işlemi diğer route maplerinde bir arada olduğu Global.asax dosyası üzerinde gerçekleştireceğiz.

Gerçekleşecek işlem sonucunda Arsiv/25-12-2009 ‘u internet penceremizde adres satırına eklediğimizde istediğimiz karşılanmış ve sayfa getirilmiş olacaktır. Fakat unutulmaması gereken bir konu vardır ki tarihi DateTime tipinden çağıracağımız için tam olarak uygun bir veriyi uygulamaya göndermemiz gerekecektir.

Kendimize özel routing map eklediğimiz global.asax dosyası aşağıdaki gibi olacaktır.

Global.asax
ausing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
     // Note: For instructions on enabling IIS6 or IIS7 classic mode,
     // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
          public static void RegisterRoutes(RouteCollection routes)
          {
              routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

              routes.MapRoute(
                     "Makale",
                     "
Arsiv/{yayinlanmaTarihi}",
                     new { controller = "Arsiv", action = "Tarih" }
              );


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

          protected void Application_Start()
          {
               RegisterRoutes(RouteTable.Routes);
          }
     }
}

Makaleler uygulamamız için gerekli olacak route map oluşturulmuş durumdadır. Artık istediğimiz bir controller sınıfında oluşturacağımız metotlar yardımı ile bunu kullanabiliriz. Kullanabileceğimiz örnek adres tiplerini yazmak gerekirse;

Arsiv/10-12-2009
Arsiv/19-07-1987
Arvis/MVC

Örnek olarak değerlendirilebilir. Fakat biz route ‘ı DateTime tipinden çağıracağımızı belirttiğimiz için Arsiv/MVC adresinde hata almamız yüksek ihtimaldir.

ArsivController.cs isimli controller sınıfımızı oluşturarak aşağıdaki metodu oluşturuyoruz.

Controller\ArsivController.cs
Controller\HomeController.cs
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public string Tarih(DateTime? yayinlanmaTarihi)
        {
            return "Makalenizin yayinlanma tarihi" + yayinlanmaTarihi.ToString();
        }
    }
}

Metod yardımıyla route ‘ı kullanabilmemiz mümkündür. Adres çubuğuna yanlış bir değer girmemiz durumunda ise girdiğimiz değeri dönüştüremeyeceğine ilişkin hata mesajını verecektir. Ayrıca null tip almasına karşında DateTime tipini nullable olarak belirtmemiz gerekmektedir.



DateTime tipinin dışında ve boş girdiğimiz değerlerde bize bu hata mesajını verecektir. Boş değer girdiğimiz zaman hata vermesini önlemek amacıyla yapmamız gereken en basit işlem nullable tip kullanmak olacaktır. Bu işlem sonucunda boş girdiğimiz anlar için hata mesajından kurtulmuş olacağız.

Routing i daha aktif bir şekilde kullanmamız ActionResult sınıfını da kullanarak işlemi yapmaktadır. Gerekli veri tabanı veya diğer işlemleri gerçekleştirdiğimizde bize gerekli sayfaya yönlendirir. Bu işlemler sonucunda da oluşturduğumuz custom routing yapıyı daha iyi kullanabilmemiz mümkün olacaktır.

Not: Yaptığınız işlemler sonucunda hala parametre almıyor ya da sayfa bulunamadı hatası veriyorsa oluşturduğunuz controller sınıfına ilişkin view ‘ı oluşturarak sorunu çözebilirsiniz.

Herkese mutlu günler diliyorum.

Turhal Temizer
info@turhaltemizer.com
http://turhal.blogspot.com