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方法就行了 ...
一周排行
  • 从3月底开始申请,整理J1的材料,一直到现在VISA的status变成了issued,中间被check了20多天,终于快要可以去silicon valley了. 废话不多说,J1签证很easy,不要有任何担心.直接上 ...
  • 题意:给你n个长为k的横木,并给出左坐标,如果两个横木能都有重叠部分或临界的话,那么这两个横木就可以互相跳跃,问能形成多大的环 思路:排序后,假设当前的i是环里的,如果满足 x[i+1]-x[i-1]
  • 1 <script type="text/javascript"> 2 $(function() { 3 var d=300; 4 $('#navigation a').each(fu ...
  • PowerShell中的格式 1. PowerShell中的对象 和win平台下的面向对象概念一致,即指我们收集信息或者执行操作的行为.包括属性(信息,我们可以收集)和方法(我们可以执行). 有一个生动的例子--&q ...
  • Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 889   Accepted: 428 以0--2^(n-1)-1为编号建立一棵树,共2^(n ...
  • ios7系统的第三个开发者测试版本已经问世了,那么此次的系统有什么新特性呢,我们一起来以图文介绍的方式来看一看,了解一下 7月9日上午消息,苹果公司发布了iOS 7的第三个开发者测试版本,此次针对系统界面有多处细微调 ...
  • 对于所有受支持的语言使用更简单的 HTTP 实现,更方便的应用通信,面向基于位置的移动方案而且用于开发通用连接应用的新 API. Windows 8.1 Preview 中的新特性或更新 新的 HTTP 客户端 AP ...
  • 当您尝试运行 Windows Server 2003. Windows XP. Windows 2000 或 Windows NT 4.0 的计算机中注销时,可能会遇到下列症状 1.在应用程序日志中记录的应用程序事件 ...
  • 易网科技讯3月30日消息,据日本媒体报道,美日两国政府计划针对太阳能发电.生物燃料等绿色能源八大最尖端领域进行共同研究.将最早4月签署合作备忘录. 报道指出,日本首相麻生太郎与美国总统奥巴马于2月举行高峰会谈时,针对 ...
  • 以前我们介绍过安装Windows7玩双系统,但由于电脑系统不一样,很多读者在卸载双系统Windows7的时候遇到了困难:Windows7分区无法格式化,双系统启动项不知道怎么处理. 其实双系统卸载Windows7也是 ...