ASP.NET MVC路由允許使用URLs描述性的使用者行為,並更容易被使用者理解。與此同時,路由可以用來隱藏其顯示給終端使用者的資料。例如,在不使用路由的應用程式,使用者將顯示的URL作為 http://myapplication/Users.aspx?id=1 這將符合所有MyApplication路徑內的檔案Users.aspx和傳送ID為1。一般來說,我們不希望這樣的顯示檔案名給最終的使用者。
為了處理MVC的URL,ASP.NET平台使用路由系統,它可以建立想要的網址任何模式,並表示他們在一個清晰,簡明的方式。在MVC每個路由包含一個特定的URL模式。這個URL模式相比傳入請求的URL,如果URL與此模式匹配,它用於由路由引擎來進一步處理請求。
要了解MVC路由,請考慮以下地址URL:
http://servername/Products/Phones
另外,在上述的URL,Products是第一段,Phone可表示在下面的格式第二段:
{controller}/{action}
MVC框架自動評估第一段作為控制器名稱,第二段作為控制器內的動作。 需要注意的是,如果控制器的名稱是ProductsController,只提Prodcuts顯示路由的URL。 MVC框架自動理解Controller字尾。
路由定義在RouteConfig.cs檔案,該檔案在App_Start專案檔案夾內。
這個檔案中的程式碼如下:
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 } ); } }
當應用程式啟動時RegisterRoutes方法被Global.ascx呼叫。Global.ascx在Application_Start方法中呼叫MapRoute功能,設定預設的控制器和動作(控制器類中的方法)。
要修改上述預設對映在我們的例子中,修改下面的程式碼行:
defaults: new { controller = "Products", action = "Phones", id = UrlParameter.Optional }
該設定將選擇的ProductsController並呼叫裡面的Phone方法。同樣,如果還有其他的方法,如ProductsController內部的Electronics方法,該網址將是:
http://servername/Products/Electronics