zoukankan      html  css  js  c++  java
  • ASP.NET MVC5(一)—— URL路由

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Web;
      5 using System.Web.Mvc;
      6 using System.Web.Mvc.Routing.Constraints;
      7 using System.Web.Routing;
      8 
      9 namespace UrlAndRoutes
     10 {
     11     public class RouteConfig
     12     {
     13         public static void RegisterRoutes(RouteCollection routes)
     14         {
     15             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
     16             //路由系统把url拆分成多个片段,如:/Home/Index 为两个片段,可以通过约束路由控制
     17             //路由顺序:一般情况下是以在RouteCollection对象中的出现顺序执行的,如果先匹配到路由,后面的将会不执行
     18             //URL模式的两个关键行为:保守的(Conservative),宽松的(Liberal)
     19             {
     20                 //这两种路由并不能对根目录进行解析
     21 
     22                 //添加路由的方式之一,新建一条路由并添加到routes中
     23                 Route route = new Route("{controller}/{action}", new MvcRouteHandler());
     24                 routes.Add("One", route);
     25 
     26                 //添加路由的方式之二,映射指定路由
     27                 routes.MapRoute("", "{controller}/{action}");
     28             }
     29             //定义默认值
     30             {
     31                 //只给动作定义默认值,有默认值的可以省略其片段,自动匹配默认值
     32                 routes.MapRoute("", "{controller}/{action}", new { action = "Index" });
     33                 //控制器于动作都定义默认值,这种定义可以识别根目录,自动匹配到默认值中,最多匹配两个片段
     34                 routes.MapRoute("", "{controller}/{action}", new { controller = "Home", action = "Index" });
     35             }
     36             //使用静态URL片段
     37             {
     38                 //使用静态字段,URL中第一个片段必须是固定的public(自定义)才能匹配到
     39                 routes.MapRoute("", "public/{controller}/{action}", new { controller = "Home", action = "Index" });
     40                 //混合片段URL模式,第一个片段必须以X开头,controller取自除X以外的部分
     41                 routes.MapRoute("", "X{controller}/{action}", new { controller = "Home", action = "Index" });
     42                 //静态字段混合片段结合,该url中不包含controller的可变片段,所以会使用默认值,
     43                 //这意味着对Shop控制器上的动作,都会被转换成对Home控制器的请求
     44                 routes.MapRoute("", "Shop/{action}", new { controller = "Home" });
     45             }
     46             //定义自定义片段变量
     47             {
     48                 //controller,action,area等是数据特殊变量名,所以在自定义片段变量中,不可以使用
     49                 //Id为自定义片段变量,在第三个片段的内容会被赋给Id,这条路由可以匹配0-3个片段的URL
     50                 routes.MapRoute("", "{controller}/{action}/{Id}", new { controller = "Home", action = "Index", Id = "default" });
     51                 //Id定义为可选参数,解析Url片段时,可选参数可以忽略,参数默认值一般在动作方法中设置
     52                 routes.MapRoute("", "{controller}/{action}/{Id}", new { controller = "Home", action = "Index", Id = UrlParameter.Optional });
     53                 //定义可边长路由,这是改变URL模式默认保守性的另一种方式
     54                 //用*号作为前缀,无论URL包含多少片段数,都将全部赋值给catcyall(自定义名称)
     55                 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}", new { controller = "Home", action = "Index", Id = UrlParameter.Optional });
     56 
     57                 //按照命名空间区分控制器的优先级顺序,在当有两个控制器相同的情况下时,如果不做设置,将会报错
     58                 //设置了命名空间后,遇到匹配的URL,则会优先寻找命名空间下的的控制器,找不到就会回归正常行为
     59                 //命名空间可以设置多个,但都属于同顺序级别,如果出现重复控制器名称,还是会报错
     60                 Route myRoute = routes.MapRoute("MyRoute", "{controller}/{action}/{Id}/{*catcyall}",
     61                     new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
     62                     new[] { "命名空间名称" });
     63                 //此设置作用于在配置了命名空间优先级后,如果找不到该配置的命名空间,将禁止寻找其他命名空间的控制器
     64                 myRoute.DataTokens["UserNamespaceFallback"] = false;
     65             }
     66             //约束路由
     67             {
     68                 //使用正则表达式约束路由,"^H.*"匹配所有controller变量值以H开头的URL
     69                 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
     70                     new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
     71                     new { controller = "^H.*" });
     72                 //将一条路由 约束到一组指定的值,设置该约束,action只能匹配片段值是Index或者About
     73                 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
     74                     new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
     75                     new { controller = "^H.*", action = "^Index$|^About$" });
     76 
     77                 //使用Http方法约束路由,HttpMethodConstraint传参类型是params类型,httpMethod是自定义名称
     78                 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
     79                     new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
     80                     new
     81                     {
     82                         controller = "^H.*",
     83                         action = "^Index$|^About$",
     84                         httpMethod = new HttpMethodConstraint("GET", "POST")
     85                     });
     86                 //使用类型和值约束,RangeRouteConstraint限制Id值为10-20之间,更多类型约束,可以参考命名空间:System.Web.Routing
     87                 //也可以自定义约束,需要实现IRouteConstraint接口
     88                 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
     89                     new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
     90                     new
     91                     {
     92                         controller = "^H.*",
     93                         action = "^Index$|^About$",
     94                         httpMethod = new HttpMethodConstraint("GET", "POST"),
     95                         Id = new RangeRouteConstraint(10, 20)
     96                     });
     97             }
     98         }
     99     }
    100 }

    学习完精通Asp.Net MVC5的URL路由章节的总结代码

  • 相关阅读:
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车按键启动和蜂鸣器报警
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    asp中设置session过期时间方法总结
    asp中设置session过期时间方法总结
    ASP.NET关于Session_End触发与否的问题
  • 原文地址:https://www.cnblogs.com/liuqiwang/p/9490260.html
Copyright © 2011-2022 走看看