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 框架中,有兩種方式建立路由:
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);
}