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 路由(二)的更多相关文章

  1. AngularJS html5Mode与ASP.NET MVC路由

    AngularJS html5Mode与ASP.NET MVC路由共存 前言 很久之前便听说AngularJS,非常酷,最近也比较火,我也在持续关注这个技术,只是没有认真投入学习.前不久公司找我们部门 ...

  2. ASP.NET MVC 视图(二)

    ASP.NET MVC 视图(二) 前言 上篇中对于视图引擎只是做了简单的演示,对于真正的理解视图引擎的工作过程可能还有点模糊,本篇将会对由MVC框架提供给我们的Razor视图引擎的整个执行过程做一个 ...

  3. ASP.NET MVC 路由(一)

    ASP.NET MVC路由(一) 前言 从这一章开始,我们即将进入MVC的世界,在学习MVC的过程中在网上搜索了一下,资料还是蛮多的,只不过对于我这样的初学者来看还是有点难度,自己就想看到有一篇引导性 ...

  4. ASP.NET MVC 路由(三)

    ASP.NET MVC路由(三) 前言 通过前两篇的学习会对路由系统会有一个初步的了解,并且对路由系统中的Url规则有个简单的了解,在大家的脑海中也有个印象了,那么路由系统在ASP.NETMVC中所处 ...

  5. ASP.NET MVC 路由(四)

    ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...

  6. ASP.NET MVC 路由(五)

    ASP.NET MVC 路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的 ...

  7. Asp.Net MVC 路由 - Asp.Net 编程 - 张子阳

    http://cache.baiducontent.com/c?m=9d78d513d98316fa03acd2294d01d6165909c7256b96c4523f8a9c12d522195646 ...

  8. Asp.Net MVC路由调试好帮手RouteDebugger

    Asp.Net MVC路由调试好帮手RouteDebugger 1.获取方式 第一种方法: 在程序包控制台中执行命令 PM> Install-Package routedebugger 安装成功 ...

  9. ASP.NET MVC路由(5)

    ASP.NET MVC路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的实 ...

随机推荐

  1. 【APICloud】APICloud基础学习与快速入门

    前言:回顾这几天学习情况,总的来说APICloud官网它的学习资料和社区还是足够了,但是我必须吐槽一句,实在是过于混乱了,视频资料文档资料它一股脑地都堆在了那里,这几天基本处于在各个地方跳转,然后现在 ...

  2. ViewPager+Fragment取消预加载(延迟加载)(转)

    原文:http://www.2cto.com/kf/201501/368954.html 在项目中,都或多或少地使用的Tab布局,所以大都会用到ViewPager+Fragment,但是Fragmen ...

  3. 最大流-最小割 MAXFLOW-MINCUT ISAP

    简单的叙述就不必了. 对于一个图,我们要找最大流,对于基于增广路径的算法,首先必须要建立反向边. 反向边的正确性: 我努力查找了许多资料,都没有找到理论上关于反向边正确性的证明. 但事实上,我们不难理 ...

  4. 基于Hadoop的密码安全级别验证

    学习Hadoop有一段时间了,期间写过很多Demo,都是针对单个知识点做的验证,今天写个完整的应用程序——基于Hadoop的密码安全级别验证. 在很多网站上注册用户时输入密码都会在下方提示密码安全级别 ...

  5. 【转】Oracle索引的类型

    数据库的应用类型分为 OLTP(OnLine Transaction Processing ,联机事务处理):OLTP是传统关系型数据库的主要应用,其主要面向基本的.日常的事务处理,例如银行交易. O ...

  6. C# uploadify 上传 -220 IO Error 问题

    1. 前端: uploadify 上文件大小限制配置. 2. 后端: web.config 配置 <?xml version="1.0"?> <configura ...

  7. jquery 获取奇数索引的元素

    $(".btn-xs:odd").click(function(){ var $buy_num=$(this).prev("#buy_num").val(); ...

  8. Node学习思维导图

    如果看不清楚图片上的内容,右键保存图片或新窗口打开.

  9. 输入/输出系统的四种不同工作方式对CPU利用率比较

    程序控制工作方式:输入/输出完全由CPU控制,整个I/O过程中CPU必须等待其完成,因此对CPU的能力限制很大,利用率较低 程序中断工作方式:CPU不再定期查询I/O系统状态,而是当需要I/O处理时再 ...

  10. 11个并不广为人知,但值得了解的Python库

    这是一篇译文,文中提及了一些不常见但是有用的Python库 原文地址:http://blog.yhathq.com/posts/11-python-libraries-you-might-not-kn ...