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