asp.net 路由学习一

从今天开始打算好好学习《ASP.NET MVC5 框架揭秘》这本书,希望让水平来一个质的提高,当然学习笔记还是要写的。
 
asp.net路由:IIS为我们提供里重写url机制,但是这在iis级别上解决了url与物理地址的分离,它的实现依赖于一个注册到IIS管道上的本地代码模块,而asp.net路由则是asp.net机制的一部分,并且是通过托管代码写的。那么到底asp.net机制是什么?首先理解一些常用类和对象。
 
   1.RouteBase类。
 
      路由系统的核心是Route对象,每一个路由注册(不同的url模式)对应的就是一个Route对象,这些Route对象注册到同一个Web应用中构成一个路由表。Route对象存储在RouteTable类里的静态属性Routes表示,这个属性返回一个RouteCollection对象。这里Route泛指继承自抽象类RouteBase的某个类型的对象
 
 
public abstract class RouteBase
        {
            //实现在GetRouteData方法中的路由解析是为了获取路由数据
            public abstract RouteData GetRouteData(HttpContextBase httpContext);
            //GetVirtualPath方法则通过路由解析生成一个完整的虚拟路径
            public abstract VirtualPathData GetVirtualPath(
                RequestContext requestContext,RouteValueDictionary values);
            //它表示是否对现有的物理文件实施路由,默认值为true,即不能通过url访问现有物理文件,只能通过路由注册表。
            public bool RouteExistingFiles { get; set; }
        }

 

 
       GetRouteData返回了一个RouteData对象,它用于封装路由数据。RouteData具有一个RouteBase的属性Route,该属性返回生成此RouteData的Route对象。其中还有
 
DataTokens和Values两个属性,这两个属性都返回RouteValueDictionary对象。RouteValueDictionary是一个实现了IDictionary<string,objects>接口的字典,用来保存路由变量。存储于Values和DataTokens的差别是:Values是解析请求url得到的;DataTokens是直接附加到路由对象上的自定义变量。RouteData类里还有一个非常重要的属性:RouteHandler,它在整个路由系统中具有重要的地位,因为最终用于处理请求的HttpHandler对象由它来提供
 
       GetVirtualPath返回了一个VirtualPathData对象。此方法被执行时,如果定义的路由模板中的变量与指定变量列表相匹配,它会使用指定的路由变量值去替换模板里的占位符,这样就得到了虚拟路径。生成的虚拟路径与Route对象最终被封装成一个VirtualPathData对象作为返回值。这个方法里还有一个参数,类型为RequestContext。
 
 
   public class RequestContext
    {
        //初始化 System.Web.Routing.RequestContext 类的新实例。
        public RequestContext();

        //httpContext:一个对象,该对象包含有关 HTTP 请求的信息
        //routeData: 一个对象,该对象包含有关与当前请求匹配的路由的信息
        public RequestContext(HttpContextBase httpContext, RouteData routeData);

        // 摘要:  获取有关 HTTP 请求的信息。
        // 返回结果: 一个对象,该对象包含有关 HTTP 请求的信息。
        public virtual HttpContextBase HttpContext { get; set; }

        // 摘要: 获取有关所请求路由的信息。
        // 返回结果: 一个对象,该对象包含有关所请求路由的信息。
        public virtual RouteData RouteData { get; set; }

 

 
 
2.Route类
 
   RouteBase是一个抽象类,在ASP.NET路由系统的应用编程接口中,Route类型是其唯一的直接继承者。这个类里面有一个Url属性,它代表绑定在该路由对象上的路由模板。当请求过来时,就根据Route对象里的Url属性与请求的url匹配,这就是路由解析。
 
    Route类型除了核心属性Url外,还有一些其他属性。Constraints为模板中的的变量设置一些约束条件,该属性类型为RouteValueDictionary,其key和Value分别为变量名和作为约束的正则表达式;Defaults同样也返回一个RouteValueDictionary对象,它保存了为路由变量定义的默认值。Route类型的DataTokens用于存储一些额外的路由变量,这些路由变量不会参与针对请求的路由解析,但对于调用Route类型的GetRouteData和GetVirtualPath方法得到的对象里的DataTokens包含的路由变量都来源于此。
更多相关文章
  • 北京商报讯(记者 蓝朝晖)虽然在国家政策的积极引导下,中国新能源汽车销售增长迅猛,但相对传统燃油汽车,续航里程短.充电难等问题依旧是阻碍新能源车广泛普及的短板.昨日,由北京市商务委员会.北京市科学技术委员会和北京市发展与改革委员会主办,北京商报社承办的北京新能源汽车发展论坛上,中国汽车工业协会副秘书 ...
  • 这两天仔细理解了一下Ajax,然后整理封装了一下,如果有什么不对的地方,请指教,谢谢! AJAX AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJAX 是与服务 ...
  • Live Http headers是Firefox下Http头信息捕获利器,常用于安全测试.但不幸的是Replay功能无法在最近版本的Firefox浏览器(35.0.1)中工作,我决定在插件的官方版本更新之前做一个临时的修复. 我发现在HTTP Headers包含If-Modified-Since能 ...
  • KStoreProductViewController类是UIViewController的子类,.希望向用户展示App Store中产品时,需要: 1.实例化一个SKStoreProductViewController类2.设置它的delegate3.把sotre product视图控制器显示给消 ...
  • 关于远程js调用phonegap本地原生代码注意:       先在本地添加好插件,或者自己建立好插件后,把 cordova.js,cordova_plugin.js  和plugin文件下的js还有自己写的插件  xxxx.js放到服务器web目录下,然后在要引用的地方加入对应的<scrip ...
  • 从ExtJS 2.0到目前的4.0,Grid的列标题对齐方式都是和数据的对齐方式一致的,这不太符合中国人的习惯.解决办法是,自己重写一下Ext.grid.column.Column对象中渲染列标题的对齐方式的代码.代码只有一句,在afterRender方法中,因而重写afterRender方法就行了 ...
一周排行
  • 高性能MySql进化论(二):数据类型的优化_下   高性能MySql进化论(一):数据类型的优化_上 http://www.2cto.com/database/201309/240780.html   ·     ...
  • 编辑评论:在使用XP的过过程中,系统运行速度会随着时间的推移越来越慢了,有的朋友可能会想到重装系统,但重装后,那么多的应用软件也要重新安装,如何在不安装系统的前提下提升XP的运行速度呢?只要你安照以下九个方面操作,相 ...
  • 游戏中经常会用到一些变换: 游戏中武器和角色在一个layer上,为了效率,会考虑将bullet, effect和 PhysicsParticle分别放到不用的层上,对应的层上使用batchnode来提高效率 武器和P ...
  • 今天遇到一个奇怪的问题,nginx的access日志不支持中文,其中我的环境变量是支持中文的: 最后的解决办法把nginx的版本降低(原先是1.2.1现在是1.0.5) 未将版本前的日志: 119.14.15.78 ...
  • 解题报告 之 SOJ3191 Free square Description Time Limit: 5000 MS Memory Limit: 65536 K DescriptionA positive integ ...
  • 现在的移动设备很多都提供定位服务,使用iOS系统的iPhone.iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星   iOS 不像A ...
  • 为国内第一款"众筹手机",大可乐3一上市便得到不少消费者的关注.但据北京晨报报道,然而近日陆续有消费者反映,自己所购买的大可乐3手机,在正常使用情况下发生屏幕开裂的情况,找到厂家后得到因" ...
  • 常见问题解决办法: 1,安装ADT时,出现如下异常. requires 'org.eclipse.gef 0.0.0' but it could not be found. requires 'org.eclipse ...
  • 对于一个正整数n,如果它的各位之和等于它的所有质因数的各位之和,则该数被称为Smith数.例如,31257=3*3*23*151,31257 的各位数字之和为3+1+2+5+7=18,它的所有质因数的各位数字之和为3 ...
  • OSI,开放式系统互联参考模型 .是一个逻辑上的定义,它把网络协议从逻辑上分为了7层. 1.物理层 2.数据链路层 3.网络层 4.传输层 5.会话层 6.表示层 7.应用层 物理层:是OSI参考模型的最低层或第一层 ...