asp.net MVC 路由系统

ASP.NET的路由系统是基于物理文件的路由注册,通过调用System.Routing.RouteTable的Routes(RouteCollection)属性的MapPageRoute()方法来完成。

ASP.NET MVC路由系统需要针对Controller和Action来注册路由,那么MVC对RouteCollection进行了一系列的扩展,实现文件路径的无关性。这些扩展定义在System.Web.Mvc.RouteCollectionExtensions类型中。

RouteCollectionExtensions定义了两组方法,

      Ignore()对应RouteCollection的IgnoteRoute()方法,不需要进行路由的模版

      MapRoute()对应RouteCollection的MapPageRoute()方法,基于Url模版进行路由注册

 

1:MapRoute()方法中,表示默认变量的参数defaults和基于正则表达式的变量约束constraints不再是RouteValueDirection对象,而是一个普通的object。我们可以用匿名对象的方式来指定这两个参数值。该方法会在内部通过发射的形式,转换成RouteValueDirection对象。

2:MVC中,路由系统对请求的地址进行解析生成的路由数据必须包含目标Controller。由于目标Controller只包括类型的名称,但是激活Controller实例前,需要解析出具体的类型,所以需要用到名称空间。在调用MapRoute()可以通过字符串数组类型的参数namespace来指定名称空间的列表。添加的名称空间列表最后都被存储于Route对象的DataTokens属性中。

3:如果某个Controller中的Action的请求与路由表匹配,具体匹配的路由对象的GetRouteData()被调用,返回一个具体的RouteData对象。对请求地址进行解析所得到的目标Controller和Action就包含在RouteData的Values属性中。

   

4:默认参数defaults的缺省Url参数UrlParameter.Optional,只有请求的Url中包含具体的值的时候,RouteData.Values属性中才包含相应的数据项。

 

posted @ 2015-06-04 13:41  鸡蛋面  阅读(173)  评论(0编辑  收藏  举报