一、所有路由都存入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();