Asp.Net MVC part3 路由Route
路由Route
路由规则Route:可以查看源代码了解一下构造方法,需要指定路由格式、默认值、处理器三个值
路由数据RouteData:当前请求上下文匹配路由规则而得到的一个对象,可以在Action中通过RouteData.GetRequestString(“controller/action”)获取本此请求中控制器或行为的真实名称
路由集合RouteCollection:存放路由规则的集合Collection<RouteBase>,一个MVC项目中,可以配置多个路由规则,按照键值对的格式存储到路由集合中
路由表RouteTable:类中包含静态的RouteCollection属性,完成所有路由规则的全局存储,在Global中完成注册
打开Global文件,来看一下路由是如何注册的
调用MapRoute方法进行注册
命名参数:在调用方法时,可以通过“参数:值”的格式进行调用,好处:注释,参数位置可以与声明时不一致
查看MapRoute方法的重载
参数name
设置路由规则的名称
必须是唯一的,重复会报异常
默认添加”Default”的路由规则
参数url
设置url的路由规则,可变的值使用{}括起来
关键字controller、action名称不可变
示例:自定义一个新闻频道路由规则
可以使用?key=value的格式传递参数
通过路由规则,可以省略?与key部分,直接传递值,在action的参数中自动装配
优化:如果传递的参数比较多,为action定义多个参数非常乱,则将所有的参数封装到一个类中,将该类定义为action的参数类型
注意:对于一个网站,为了SEO友好,一个网址的URL层次不要超过三层
示例:localhost/{频道}/{具体网页},其中域名第一层, 频道第二层, 那么最后的网页就只剩下最后一层了. 如果使用默认实例中的“{controller}/{action}/{id}”的形式会影响网站的SEO,可以使用”/”之外的其它字符进行分隔,如”-”,但这时会进行严格匹配,即必须要有-才可以匹配到,默认值会失效
参数defaults
设置路由规则中参数的默认值
类型为object,可以传递一个匿名对象,属性取决于规则中定义的参数
参数UrlParameter.Optional表示可选的只读参数
如果在实际的url中没有指定路由规则中某些参数,则会使用默认值作为参数的值使用
参数defaults
设置路由规则中参数的默认值
类型为object,可以传递一个匿名对象,属性取决于规则中定义的参数
参数UrlParameter.Optional表示可选的只读参数
如果在实际的url中没有指定路由规则中某些参数,则会使用默认值作为参数的值使用
参数constraints
设置路由规则的约束
类型为object,可以传递一个匿名对象,属性取决于规则中定义的参数
参数是正则表达式字符串,如controller=“^[a-z]+$”
总结
路由规则可以注册多条
路由规则的名称不能重复
路由规则有顺序,并且按照顺序进行匹配;建议子频道的路由规则配置在前面
路由规则可以设置约束
路由规则匹配的控制器可以设置命名空间约束