1. 程式人生 > 其它 >ASP.NET MVC 路由機制

ASP.NET MVC 路由機制

傳統的ASP.NET web form 是假想,使用者請求的URL和伺服器上面的檔案之間有某種關聯,這裡,伺服器的工作就是根據接收到的使用者請求,檢索到對應的檔案給使用者。這種方式在web form時代很適合,因為ASP.NET頁面是aspx頁面,並且能夠獨立的回覆使用者的瀏覽器請求。
但是這中方式在MVC中不合適,在MVC中使用者請求是通過控制器裡面的方法來處理的,在MVC中沒有ASP.NET,一對一的檔案關聯關係;為了解決這個問題,我們要學會MVC路由機制。
路由機制有兩個功能:
1.檢查收到的URL請求,來判斷這個請求是要請求哪個控制器哪個方法的;
2.生成外部URL(使用者點選某個連結的時候,會有一個請求,通過檢視展現在瀏覽器上面的URL)

現在我們來開始學MVC路由配置吧:

在MVC 框架中,有兩種方式建立路由:

1.基於約定的路由配置

2.特定的路由配置

你可能已經很熟悉了基於約定的路由配置,但是特定的路由配置是MVC5中新增加的。我們在這裡都會學習

路由機制不知道,什麼是(Controller)控制器,什麼是(Actions)方法,它只是提取URL片段,路由的請求處理在後面的處理中,當滿足路由配置的時候,才能得到請求的頁面;

預設的,路由會匹配擁有正確的片段的URL,例如{controller}/{action},會匹配有兩個片段的URL

URL模式是保守的,只會匹配擁有同樣的片段的URL,但是URL模式又是包容的,只要URL有正確的片段,就會檢查片段的值,但不論值是啥。

路由配置是在RouteConfig.cs檔案中的;

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 }
           
            
        );
        routes.MapRoute(
            name: "Student",
            url: "student/{id}",
            defaults: new { controller = "Student", action = "Index"},
              constraints: new { id = @"\d+" }

); }

RegisterRoutes這個靜態方法在Global.asax檔案中被呼叫,程式每次執行的時候,會執行Global檔案中的Application_Start()方法,進行路由註冊;
protected void Application_Start()
{

        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }