18 Kasım 2016 Cuma

Asp.Net Mvc Yönlendirme (Routing) İşlemleri

2 yorum
Asp.Net Web Forms uygulamalarında her url bir .aspx  dosyası ile eşleşiyordu. Örneğin; www.codefixes.xyz/merhaba.aspx url'si bir merhaba.aspx dosyası ile bağlantılıydı.

Asp.Net Routing kavramını tanımlıyarak, her url'nin bir fiziksel dosya ile ilişkişendirilmesi zorunluluğunu ortadan kaldırmış oldu. Routing sadece Mvc frameworküne ait bir kavram değildir, aynı zamanda Asp.Net WebForms uygulamaları ile de kullanılabilir.

Route işlemi bir url pattern oluşturur ve bu patternları bir RouteTable'da tutarak Routing işlemi ile hangi dosyanın çağırılacağına karar verir. İşlem şemasını aşağıdan inceleyebilirsiniz:

asp.net mvc routing işlemleri

Her Mvc uygulaması en azından bir tane route konfigürasyonu içermelidir. Mvc frameworkü tarafından bu App_Start klasörü altında RouteConfig class dosyası içerisinde varsayılan olarak oluşturulmaktadır.

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

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Yukarıda görüldüğü gibi yoksayılacak url bilgisi ve varsayılan olarak oluşturulan konfigürasyonu inceleyebilirsiniz.  Buradaki konfigürasyon sonucunda bir controllera bağlı bir action metodu çağrılabilir ve eğer varsa bir id parametresi bu metoda pass edilebilir. Aynı yukarıdaki gibi, farklı yapılarda url bilgileriniz varsa siz de kendi konfigürasyonununuzu buraya yazabilirsiniz. Routing mekanizması, sizin yazacağınız konfigürasyon ile eşleşen bir url isteği gelmesi halinde otomatik olarak bu konfigürasyon bilgilerini kullanacaktır.

Varsayılan olarak gelen yukarıdaki konfigürasyona örneğin aşağıdaki gibi bir istek gelebilir:

www.codefixes.xyz/Home/Index/2

Bu kısımda kırmızı ile yazılan Home bizim Controller ismimizi içermektedir, Index kısmı bu controller içerisindeki Action metodumuzun ismidir, 2 ise bizim routing konfigürasyonumuzda belirttiğimiz isteğe bağlı id parametresidir. Yukarıdaki varsayılan konfigürasyonla eşleşecek farklı url örneklerini aşağıdan inceleyebilirisiniz:

URLControllerActionId
http://localhost/homeHomeControllerIndexnull
http://localhost/home/index/123HomeControllerIndex123
http://localhost/home/aboutHomeControllerAboutnull
http://localhost/home/contactHomeControllerContactnull
http://localhost/studentStudentControllerIndexnull
http://localhost/student/edit/123StudentControllerEdit123

Route Kısıtlamaları

Yönlendirme yaparken verdiğimiz parametreler için bazı kısıtlamaları RouteConfig dosyasında konfigürasyon oluştururken verebiliriz:

  routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional },
constraints: new { id = @"\d+" }
);
Örneğin bu konfgürasyonda id parametesinin sadece nümerik parametre alabileceğiniz constraints kısmında belirttik.

Route konfigürasyonlarmızı belirttikten sonra bunu uygulama başlangıcında (Application_Start() metodunda) Global.asax dosyasında register ediyoruz:

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

2 yorum:

  1. Merhaba peki aynı proje içinde 2 tane Mvc projemiz varsa Admin ve User diye bunları nasıl biribirine yönlendireceğiz. Yani mesela user açık iken nasıl Admin projesini çalıştıracağım.(.com/Admin'e nasıl geçerim)

    YanıtlaSil
    Yanıtlar
    1. Merhaba;
      User controllerdayken, return RedirectToAction("Admin"); diyerek Admin sayfasına yönlendirme yapabilirsiniz.

      Sil