ASP.NET-Router配置中MapRoute的参数
1. MapRoute( string name, string url);
2. MapRoute( string name, string url, object defaults);
3. MapRoute( string name, string url, string[] namespaces);
4. MapRoute( string name, string url, object defaults, object constraints);
5. MapRoute( string name, string url, object defaults, object constraints, string[] namespaces);
规则名称, 可以随意起名. 不可以重名,否则会发生错误:路由集合中已经存在名为“Default”的路由。路由名必须是唯一的。目前还没看到它的的作用
下面以酒店频道为例, 是我创建的Routing规则:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
#region 酒店频道部分
// hotels/list-beijing-100,200-3
routes.MapRoute(
"酒店列表页",
"hotels/{action}-{city}-{price}-{star}",
new { controller = "Hotel", action = "list", city = "beijing", price="-1,-1", star="-1" },
new { city=@"[a-zA-Z]*",price=@"(\d)+\,(\d)+", star="[-1-5]"}
);
//hotels/所有匹配
routes.MapRoute(
"酒店首页",
"hotels/{*values}",
new { controller = "Hotel", action = "default", hotelid = "" }
);
#endregion
//网站首页.
routes.MapRoute(
"网站首页",
"{*values}",
new { controller = "Home", action = "index"}
);
}
实现的功能:
(1)访问 localhost/hotels/list-beijing-100,200-3 会访问酒店频道的列表页,并传入查询参数
(2)访问 localhost/hotels 下面的任何其他页面地址, 都会跳转到酒店首页.
(3)访问 localhost 下面的任何地址, 如果未匹配上面2条, 则跳转到首页.
简单总结:
(1)Routing规则有顺序(按照添加是的顺序), 如果一个url匹配了多个Routing规则, 则按照第一个匹配的Routing规则执行.
(2)由于上面的规则, 要将具体频道的具体页面放在最上方, 将频道首页 和 网站首页 放在最下方.
(3) {*values} 表示后面可以使任意的格式.