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.路由规则可以设置约束