ASP.NET MVC 路由(二)
ASP.NET MVC路由(二)
前言
在上一篇中,提及了Route、RouteCollection对象的一些信息,以及它们的结构所对应的关系。按照处理流程走下来还有遗留的疑问没有解决这个篇幅就来讲解一下。
URL规则的生成
Url规则看名字挺吓唬人的,其实就是根据我们自定义的Url来解析出一个模式,然后等待请求的Url来的时候,跟我们定义的模式进行匹配(如下图)。这是后续的内容。

在上篇中说到URL规则的定义是在Route对象中的,下面来讲解在Route对象中怎么根据用户注册的URL转变成URL规则。
还是用前面的示例来演示,在前篇中说道,在MapRoute方法中的”{control}/{action}/{id}”参数部分代表着要赋值到Route对象的Url属性,也说过在赋值Route对象的Url属性时Set访问器还会做一些其它的操作。例如代码1-1:
代码1-1
public class Route
{
private string _url;
private ParsedRoute _parsedRoute;
public string Url
{
get { return _url; }
set
{
_url = value;
//解析Value值
this._parsedRoute = RouteParser.Parse(value);
}
}
……
}
这里只是显示了Route对象的一部分用于演示,在代码1-1中,可以看出RouteParser类型负责把接收到的Url值转换成ParsedRoute类型的对象。
这个ParsedRoute类型的对象是Route类型的内部私有类型,而转换而成的Url模式信息就存放在这个类型的对象实例中。请看图1:
图1

图1所示,当一个Url值为”{controller}/{action}”赋值到Route对象的Url属性时,会由RouteParser内部类型的Parse()静态方法来执行Url解析并且转换成ParsedRoute内部类型,而ParsedRoute类型的构造函数是由PathSegment类型的集合构成。而在MVC框架中并不是使用PathSegment类型的,而是使用PathSegment类型的的派生类(如图2),并且这些派生类分别对应着不同的Url片段,就好比示例的”{controller}/{action}”就会分别的表示为两种类型(下面会讲到)。
图2

正如图2所示的对象模型,按照图2的模型结构。这个时候ParsedRoute内部所存的Url模式值为图3所示,
图3

如图3所示上述示例中的“controller”生成为ContentPathSegment类型,而“/”则被生成为SeparatorPathSegment类型。对于这些类型的具体细节这里就不做详细的介绍了。目的在于只是把内部的实现粗略的把对象模型说明一下,目的就是让大家知道有这么一个过程来生成URL规则,并且是什么样的一个实现的方式,让大家知道Route对象的本身就是带有URL规则的,在服务器请求到来的时候是众多Route对象根据自身携带的URL规则来进行匹配,这部分内容后续说到。
如果感兴趣想清晰的知道内部实现的具体,可以自己用反编译工具来看里面的源代码,这部分的Url规则的生成过程就讲到这里。
希望看完后大家能够记住大概的流程和这些对象在系统中的位置。会在下一篇幅讲解RouteData的是怎么根据请求的Url来匹配生成的。
作者:金源
出处:http://www.cnblogs.com/jin-yuan/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面
ASP.NET MVC 路由(二)的更多相关文章
- AngularJS html5Mode与ASP.NET MVC路由
AngularJS html5Mode与ASP.NET MVC路由共存 前言 很久之前便听说AngularJS,非常酷,最近也比较火,我也在持续关注这个技术,只是没有认真投入学习.前不久公司找我们部门 ...
- ASP.NET MVC 视图(二)
ASP.NET MVC 视图(二) 前言 上篇中对于视图引擎只是做了简单的演示,对于真正的理解视图引擎的工作过程可能还有点模糊,本篇将会对由MVC框架提供给我们的Razor视图引擎的整个执行过程做一个 ...
- ASP.NET MVC 路由(一)
ASP.NET MVC路由(一) 前言 从这一章开始,我们即将进入MVC的世界,在学习MVC的过程中在网上搜索了一下,资料还是蛮多的,只不过对于我这样的初学者来看还是有点难度,自己就想看到有一篇引导性 ...
- ASP.NET MVC 路由(三)
ASP.NET MVC路由(三) 前言 通过前两篇的学习会对路由系统会有一个初步的了解,并且对路由系统中的Url规则有个简单的了解,在大家的脑海中也有个印象了,那么路由系统在ASP.NETMVC中所处 ...
- ASP.NET MVC 路由(四)
ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...
- ASP.NET MVC 路由(五)
ASP.NET MVC 路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的 ...
- Asp.Net MVC 路由 - Asp.Net 编程 - 张子阳
http://cache.baiducontent.com/c?m=9d78d513d98316fa03acd2294d01d6165909c7256b96c4523f8a9c12d522195646 ...
- Asp.Net MVC路由调试好帮手RouteDebugger
Asp.Net MVC路由调试好帮手RouteDebugger 1.获取方式 第一种方法: 在程序包控制台中执行命令 PM> Install-Package routedebugger 安装成功 ...
- ASP.NET MVC路由(5)
ASP.NET MVC路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的实 ...
随机推荐
- 2003服务器搭建vpn
先说下为什么会有本文,公司的git突然被防火墙屏蔽了,有些同事无奈用4g网去提交,我比较穷,1g的小水管hold不住,于是我想着用vpn.国内封杀的比较严重,免费的更是少,找朋友要了一个3小时试用的, ...
- PHP常用函数、数组方法
常用函数:rand(); 生成随机数rand(0,50); 范围随机数时间:time(); 取当前时间戳date("Y-m-d H:i:s"); Y:年 m:月份 d:天 H:当前 ...
- 【iOS [[UIApplication sharedApplication] delegate]】运用
之前想要拿到app的窗口,我们通常的写法是: [UIApplication sharedApplication].keyWindow 这种写法之前一直也觉得是正确的,没什么问题,而且网上大多数的博客或 ...
- 《DSP using MATLAB》示例Example5.17
- SQLServer生成三位姓名及11位国内电话号码(生成测试数据用)
SELECT SUBSTRING(N'王李张刘陈杨黄赵吴周徐孙马朱胡郭何高林郑谢罗梁宋唐许韩冯邓曹彭曾肖田董袁潘于蒋蔡余杜叶程苏魏吕丁任沈姚卢姜崔钟谭陆汪范金石廖贾夏韦付方白邹孟熊秦邱江尹薛闫段雷侯龙 ...
- Android资源站
用这个帖子记录下看到的好的android资源站 1.各种资源:http://appxcode.com/ 2.图标 2.1 http://www.easyicon.net 2.2 http://www. ...
- 如何用Qt做SolidWorks二次开发
这个问题困扰了我2年了,之前找到的教程都是MFC的,ATL导入向导或是通过导入类型库的方式来调用控件,我一直都搞不明白. 最近学习了ActiveQT以及通过ActiveQT控制EXCEL.Word.P ...
- jQuery参数学习与整理
bind---可同时为元素嵌套多个事件. blur---当输入框焦点失去时发生的事件(获得焦点参数focus与之同理) change---当元素值改变时发生的事件 click---单击事件 dbcli ...
- css3之3D魔方动画(小白版)
在这里分享一下3D魔方动画,html5+CSS3即可完成~无图无真相,先上效果图 第一步非常简单,就是先将魔方的结构画出来.大家都玩过魔方,知道魔方是一个有六个面的正方体.这里我们先写一个大的di ...
- javascript获取childNodes详情,删除空节点
chidNodes返回的是node的集合, 每个node都包含有nodeType属性. nodeType取值: 元素节点:1 属性节点:2 文本节点:3 注释节点:8 页面上是由无数个节点组成 ...