標籤:style blog color 檔案 art io
MVC中的URL也就是路由,不用通過路徑訪問實際的物理檔案而達到向使用者展示介面。
URL的路由功能 一方面正向 映射到Controller和Action,根據使用者輸入的URL觸發相應的控制器和對應方法,另一方面則反向映射並構造出URL,根據控制器和行為構造出URL以供程式調用。
系統初次開機將會載入Global.asax檔案的Application_Start方法並去執行RegisterRoutes()構造器
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); AuthConfig.RegisterAuth(); }
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 } ); }
RegisterRoutes()方法建立了預設的路由表且包含了一個預設路由home/index,route.MapRoute()方法根據設定的屬性自動完成建立Route的執行個體。並命名為"Default",訪問格式為"{controller}/{action}/{id}"並提供了一個預設的訪問路由路徑,"home/inde"。將Home控制器指向url中的Controller,行為Index指向action並提供了一個預設的ID參數。之所以把路由的添加放在了Global.asax檔案中,是為了確保在程式啟用時,將設定的路由填充到預設的路由表中。
路由表的設定格式
| 有效路由定義 |
舉例 |
| {Controller}/{action}/{id} |
/product/show/beverages |
| {table}/Details.aspx |
/product/Details.aspx |
| blog/{action}/{entry} |
/blog/show/123 |
| {reporttype}/{year}/{month}/{day} |
/sales/2008/1/5 |
當處理來自頁面來自/product/show的請求時,MVC架構把product賦值給了參數Controller 把Show賦值給了參數action,並把null賦值給了參數ID。
MVC之所以能完成上述一系列操作,是因為RouteCollection構造器調用了一些的介面去不斷的反射和映射傳入和輸出的Route。詳情可查看RouteCollection內建屬性。這裡不再做闡述。