MVC之路由

1.路由规则理解:

在MVC项目中,路由是一个独立的模块,需要引入System.Web.Routing ,路由的作用就是确定控制器和行为,同时确定其他的参数,然后将这些信息传递个相应的控制器和行为。

  public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

 我们可以使用MapRoute方法定义我们自己的路由规则,这个方法存在着很多的重载,可以根据需求进行添加,自己定义的Route,越详细 的应该放在最前面,因为路由规则一但匹配到之后,就不会继续往下走了

  public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(name: "first", url: "{controller}-{action}-{id}-{price}}"
                , defaults: new {controller="Hotel",action="Index",id=1,price=3 }
                );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });

            routes.MapRoute(name: "首页", url: "{*values}"
                , defaults: new {controller="Hotel",action="Index" }
                
            );
        }
    }

2.MapRoute方法中的参数

1.name:表示路由规则的名称,这个名称必须是唯一的,否则将会报错,默认情况的名字是Default

2.url:表示路由的规则,可变的参数用‘{}’括起来,同时对于路由规则中,通过自己定义的路由规则,可以实现参数的传递,代替?key=**,同时可以在Action中实现自动的绑定,但是参数过多的话,将会比较混乱,同时为了SEO的优化,最好不要超过三级

3.defaults:设置路由规则中的默认值,可以传递一个匿名类型,给相应的变量赋值。

4.constraints:对规则进行约束,可以用一个匿名类型,给相应的参量进行约束。如:controller=“^[a-z]+$”

 3.路由对象:

Route(路由规则):存放一条路由的规则,需要指定路由格式、默认值、处理器三个值
RouteData(路由数据):当前请求上下文匹配路由规则而得到的一个对象,可以在Action中通过RouteData.GetRequestString(“controller/action”)获取本此请求中控制器或行为的真实名称,可以获取相应的路由数据。
RouteCollection(路由集合):存放路由规则的集合Collection<RouteBase>,一个MVC项目中,可以配置多个路由规则,按照键值对的格式存储到路由集合中
RouteTable(路由表):类中包含静态的RouteCollection属性,完成所有路由规则的全局存储,在Global中完成注册

4.总结:

1.路由规则可以注册多条
2.路由规则的名称不能重复
3.路由规则有顺序,并且按照顺序进行匹配;建议子频道的路由规则配置在前面
4.路由规则可以设置约束