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:
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:
URL | Controller | Action | Id |
---|---|---|---|
http://localhost/home | HomeController | Index | null |
http://localhost/home/index/123 | HomeController | Index | 123 |
http://localhost/home/about | HomeController | About | null |
http://localhost/home/contact | HomeController | Contact | null |
http://localhost/student | StudentController | Index | null |
http://localhost/student/edit/123 | StudentController | Edit | 123 |
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+" }
);
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);
}
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ıtlaSilMerhaba;
SilUser controllerdayken, return RedirectToAction("Admin"); diyerek Admin sayfasına yönlendirme yapabilirsiniz.