在一個route中,通過在大括號中放一個占位符來定義( { and } )。當解析 URL的時候,符號"/"和"."被作為一個定義符來解析,而定 義符之間的值則匹配到占位符中。route定義中不在大括號中的信息則作為常量值 。
下面是一些示例URL:
Valid route definitions Examples of matching URL {controller}/{action}/{id} /Products/show/beverages {table}/Details.aspx /Products/Details.aspx blog/{action}/{entry} /blog/show/123 {reporttype}/{year}/{month}/{day} /sales/2008/1/5
通常,我們在Global.asax文件中的Application_Start事件中添加routes,這 確保routes在程序啟動的時候就可用,而且也允許在你進行單元測試的時候直接 調用該方法。如果你想在單元測試的時候直接調用它,注冊該routes的方法必需 是靜態的同時有一個RouteCollection參數。
下面的示例是Global.asax中的代碼,演示了添加一個包含兩個URL參數action 和 categoryName的Route對象:
public static void RegisterRoutes(RouteCollection routes)
{
//忽略對.axd文件的Route,也就是和WebForm一樣直接去訪問.axd文件
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Category", // Route 的名稱
"Category/{action}/{categoryName}", // 帶有參數的URL
new { controller = "Category", action = "Index", categoryName = "4mvc" } // 設置默認的參數
);
}
protected void Application_Start()
{
//在程序啟動的時候注冊我們前面定義的Route規則
RegisterRoutes(RouteTable.Routes);
}
在這裡我不打算再詳細去講解。以下只是簡單的說明一下。
忽略對某類URL的Routing:
//忽略對.axd文件的Route,也就是和WebForm一樣直接去訪問.axd文件
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
添加約束條件,支持正則表達式。例如我們需要對id參數添加一個必須為數字 的條件:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new {controller="Home",action="Index",id=""},
new{id=@"[\d]*"}//id必須為數字
);