MapRoute的参数

ASP.NET-Router配置中MapRoute的参数


App_Start文件夹中的RouteConfig
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); 
     MapRoute( string name, string url, object defaults, string[] namespaces);
5.   MapRoute( string name, string url, object defaults, object constraints, string[] namespaces);

解释如下:

  name参数:

  规则名称, 可以随意起名. 不可以重名,否则会发生错误:路由集合中已经存在名为“Default”的路由。路由名必须是唯一的。目前还没看到它的的作用

url参数:
   url获取数据的规则,这里不是正则表达式,将要识别的参数括起来即可,比如: {controller}/{action}
最少只需要传递name和url参数就可以建立一条Routing(路由)规则,比如实例中的规则完全可以改为:
routes.MapRoute( “Default”, “{controller}/{action}”); 如 用法 1.

url参数的默认值:如果一个url只有controller: localhost/home/,而且我们只建立了一条url获取数据规则: {controller}/{action},那么这时就会为action参数设置defaults参数中规定的默认值。由于defaults参数是Object类型,所以可以传递一个匿名类型来初始化默认值:new { controller = “Home”, action = “Index” }

constraints参数:
用来限定每个参数的规则或Http请求的类型。constraints属性是一个RouteValueDictionary对象,也就是一个字典表,但是这个字典表的值可以有两种类型:
一是:用于定义正则表达式的字符串(正则表达式不区分大小写)。通过使用正则表达式可以规定参数格式,比如controller参数只能为4位数字:new { controller = @”\d{4}”}

例子:

下面以酒店频道为例, 是我创建的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} 表示后面可以使任意的格式.














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值