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属性中才包含相应的数据项。

最新文章

  1. 构造函数忘记new? 看这里看这里
  2. struts深入理解之登录示例的源码跟踪
  3. 如何将java代码生成一个bat文件
  4. QT线程(一):线程类
  5. 数据搬运工DSS~介绍
  6. Angularjs2——TypeScript学习网站
  7. iOS Crash文件的解析
  8. Nginx+Tomcat的服务器端环境配置详解
  9. 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
  10. 网络资源(8) - JAX-RS视频
  11. 通过DNS传输后门来绕过杀软
  12. 机器学习算法GBDT的面试要点总结-上篇
  13. vue移动端适配
  14. Python开发【第十一篇】:MySQL
  15. Mybatis优缺点
  16. react项目使用bootstrap
  17. Android--普通注册页面实现(无功能)
  18. 汇编 sub减法指令 比较指令CMP JZ条件跳转指令
  19. jQuery(七):节点操作
  20. jquery easyui toolbar 分割线问题

热门文章

  1. aspnet-webapi-2-contrib
  2. c# 播放器 支持所有格式
  3. 快速构建Windows 8风格应用30-应用生命周期管理
  4. 命令行配置源和安装本地rpm包
  5. CSS3自适配手机屏幕[转]
  6. 【MS SQL】把多个数据库合并为一个新的数据库
  7. .Net中批量更新或添加数据
  8. android 布局属性大全---初学者必备
  9. (转载)Log4Net 在多层项目中的使用小记
  10. springmvc的一些记录