ASP.NET MVC 路由(二)
来源:互联网 发布:现在的网络电视哪种好 编辑:程序博客网 时间:2024/06/05 18:20
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
1 public class Route 2 { 3 private string _url; 4 private ParsedRoute _parsedRoute; 5 public string Url 6 { 7 get { return _url; } 8 set 9 {10 _url = value;11 //解析Value值12 this._parsedRoute = RouteParser.Parse(value);13 }14 }15 ……16 }
这里只是显示了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://blog.csdn.net/jinyuan0829
本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面
- ASP.NET MVC 路由(二)
- Asp.Net MVC 路由
- Asp.Net MVC 路由
- Asp.Net MVC 路由
- Asp.Net MVC 路由
- Asp.Net MVC 路由
- Asp.Net MVC 路由
- Asp.Net MVC 路由
- Asp.Net MVC 路由
- ASP.NET MVC 自定义路由
- ASP.NET MVC 路由(一)
- ASP.NET MVC 路由(三)
- ASP.NET MVC 路由(四)
- ASP.NET MVC 路由(五)
- ASP.NET MVC路由配置
- ASP.NET MVC路由配置
- ASP.NET MVC 路由系统
- asp.net mvc 路由功能
- ASP.NET MVC3细嚼慢咽---(1)网站创建与发布
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 解决新浪微博JSSDK, WB2.login()失效问题
- c语言运算符优先级巧记
- [Java 11 常用类库] 总结要点
- ASP.NET MVC 路由(二)
- 通过ffmpeg把图片转换成视频(ffmpeg工具 命令)
- 关于部署 phpbb 论坛
- xcode路径引起的问题,使用xcode-select -print-path 显示后再使用Xcode-select -switch更改
- 使用jqMobi开发app基础:弹出内容的设计
- XCode调试技巧之EXC_BAD_ACCESS中BUG解决
- Asp.Net Word、Excel转PDF在线预览
- Oracle DBA高效入职指南学习篇九
- 【luajit,export有效】安装cocoapods时出现could not stat active Xcode path的解决办法