asp.net MVC 路由系统
2015-06-04 13:41
561 查看
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属性中才包含相应的数据项。
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属性中才包含相应的数据项。
相关文章推荐
- asp.net中的路由系统
- 简单原始的ASP.NET WEBFORM中多文件上传【参考其他资料修改】
- 客户端获取服务器SessionID (Asp.net SessionID)
- AspNet MVC4 教学-24:Asp.Net MVC4 Url及Html的Encode技术快速Demo
- 使用aspose.word 第三方的插件实现导出word
- 解读ASP.NET 5 & MVC6系列(17):MVC中的其他新特性
- ASP.NET 图片上传工具类 upload image简单好用功能齐全
- ASP.NET假分页
- asp.net局部刷新数据库
- ASP.NET中配合JS实现页面计时(定时)自动跳转
- Bind("入库日期", "{0:yyyy-MM-dd}") 关于asp.net格式化数据库日期字符串
- windows server 2008 iis 搭建asp
- 让 ASP.NET JS验证和服务端的 双验证 更简单
- Asp.net--数据绑定控件Repeater
- [Asp.net 5] Logging-日志系统的基本架构(上)
- ABP(现代ASP.NET样板开发框架)系列之6、ABP依赖注入
- ASP.NET MVC与WebForm区别
- asp中Scripting.Dictionary字典对象使用示例
- 关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方案
- Asp.Net alert弹出提示信息的5种方法