一、所有路由都存入RouteCollection類型的靜態變量中
namespace System.Web.Routing { // // 摘要: // 存儲應用程序的 URL 路由。public class RouteTable {// // 摘要: // 獲取從 System.Web.Routing.RouteBase 類派生的對象的集合。 // // 返回結果: // 包含集合中的所有路由的對象。 public static RouteCollection Routes { get; } } }
注冊路由實際上是往Routes添加Route實例(System.Web.Routing.Route --繼承System.Web.Routing.RouteBase)
二、Route構造函數的5個參數
// 獲取或設置為 URL 參數指定有效值的表達式的詞典。 public RouteValueDictionary Constraints { get; set; } // 獲取或設置傳遞到路由處理程序但未用於確定該路由是否匹配 URL 模式的自定義值。 public RouteValueDictionary DataTokens { get; set; } // 獲取或設置要在 URL 不包含所有參數時使用的值。 public RouteValueDictionary Defaults { get; set; } // 獲取或設置處理路由請求的對象。 public IRouteHandler RouteHandler { get; set; } // 獲取或設置路由的 URL 模式。 public string Url { get; set; }
必需的是:Url、RouteHandler ,如:
Route route = new Route("{controller}/{action}/{id}", new MvcRouteHandler());
DataTokens:常用於配置區域、命名空間(可多個)。注:key、value都不區分大小寫(建議:key小寫)
RouteValueDictionary dataTokens = new RouteValueDictionary(); dataTokens.Add("area", "MyArea"); dataTokens.Add("namespaces", new string[] {"MyApp.Areas.MyArea.Controllers"});
三、區域路由其它配置方式(代碼中添加區域時VS自動添加了類 RouteTestAreaRegistration)
public class RouteTestAreaRegistration : AreaRegistration { public override string AreaName { get { return "RouteTest"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "RouteTest_default", "RouteTest/{controller}/{action}/{id}", new { controller = "Yes", action = "Index", id = UrlParameter.Optional } ); } }
程序啟動入口(Application_Start)調用以下方法注冊:
AreaRegistration.RegisterAllAreas();