---恢复内容开始---

MVC是一种模式,是基于asp.net上的一种设计。路由机制不属于MVC,路由机制属于asp.net。因此,mvc的路由机制就是基于asp.net路由机制上的一种“自定制”。

ASP.Net路由系统中的核心就是Route对象,每一个Route对应一个路由模板,多个Route对象再加上匹配方法共同构成一个路由表,更确切表述为路由机制(即RouteTable类,该类位于命名空间System.Web.Routing)。

RouteTable类中的静态属性Routes具有一个根据HttpContext中传入的物理路径映射到一个路由模板上的方法。RouteCollection实际是Route的集合,即包含了很多Route,后面会做介绍。

RouteTable
Static RouteCollection Routes;//RouteCollection 具有一个方法MapRoute
 

RouteBase类

Route对象是继承于抽象类RouteBase,一个方法用来控制根据url进行路由,另一个获取虚拟路径。属性用于确定采用哪种方法进行路由,默认为true即采用GetRouteData方法。因此我们在访问  ~/sample/sample.html无法直接访问该文件,而webForm下则可以通过改变此值直接获取虚拟路径的方式访问 sample.aspx页面文件(下面只介绍实施路由的情况)。

                                                                                    RouteBase
abstract RouteData GetRouteData(HttpContext httpcontext)  
abstract VirutualPathData GetVirtual(RequestContext requestcontext)
bool RouteExistingFiles{get;set;}

RouteData类

Route属性,返回生成的RouteBase对象;DataTokens实际存储的就是注册的路由模板,Values存储的为传入的Url,在路由匹配时会对二者进行解析匹配。

RouteHandler是这其中最关键的属性,在web请求中HttpHandler来处理请求(即对传入的url以及参数,封装成上下文对象,然后传入接下来要执行的动作即controller的执行)。

PS:了解这块,需要了解httphandler如何在整个HttpApplication对象活动期间在调用默认handler前去加载指定的handler;可以在web.config中指定特定Httphandler来处理相应请求。

RouteData
Route();
Route(RouteBase route,IRouteHandler routehandler);
string GetRequiredString(string name);
RouteBase Route {get;set;}
IRouteHandler RouteHandler{get;set;}
RouteValueDictionary DataTokens{get;}
RouteValueDictionary Values{get;}

Route类

Route类继承于RouteBase,也是我们在global.asax中进行定义的对象。属性URl即代表在global.asax中注册路由时填写的模板

Route
。。。。//各种构造函数,基类中方法实现
string Url{get;set;}
RouteValueDictionary  Constraints{get;set;}//利用正则进行约束
RouteValueDictionary  Default{get;set;}//模板默认值
RouteValueDictionary  DataToken{get;set;}
IRouteHandler RouteHandler{get;set;}

RouteCollection类

RouteCollection继承于collection<RouteBase>,其中最重要的方法就是RouteMapPageRoute方法(参数路由名称,路由url,是否可直接访问物理文件)获取匹配Route对象,。Ignore方法对url过滤。同时RouteCollection实现了线程安全来应对并发时的读写问题。

还有的主要属性有AppendTrailingSlash和LoweCaseUrls可以对Url进行结尾‘/’以及大小写的处理。

RouteCollection
。。。//构造函数,基类方法实现,等
void Ignore( string url[,object contstrain])//两个ignore重载方法
Route RouteMapPageRoute(string name,string routeUrl,bool CheckPhysicalUrlAccess)//路由方法,遍历所有Route寻找匹配的并且返回
其他方法。。。

MVC5之路由机制的更多相关文章

  1. 【C#】 WebApi 路由机制剖析

    C#进阶系列——WebApi 路由机制剖析:你准备好了吗? 转自:https://blog.csdn.net/wulex/article/details/71601478 2017年05月11日 10 ...

  2. C#进阶系列——WebApi 路由机制剖析:你准备好了吗?

    前言:从MVC到WebApi,路由机制一直是伴随着这些技术的一个重要组成部分. 它可以很简单:如果你仅仅只需要会用一些简单的路由,如/Home/Index,那么你只需要配置一个默认路由就能简单搞定: ...

  3. Linux mips64r2 PCI中断路由机制分析

    Linux mips64r2 PCI中断路由机制分析 本文主要分析mips64r2 PCI设备中断路由原理和irq号分配实现方法,并尝试回答如下问题: PCI设备驱动中断注册(request_irq) ...

  4. 走进AngularJs(八) ng的路由机制

    在谈路由机制前有必要先提一下现在比较流行的单页面应用,就是所谓的single page APP.为了实现无刷新的视图切换,我们通常会用ajax请求从后台取数据,然后套上HTML模板渲染在页面上,然而a ...

  5. MVC路由机制

      按照传统,在很多Web框架中(如经典的ASP.JSP.PHP.ASP.NET等之类的框架),URL代表的是磁盘上的物理文件.例如,当看到请求http://example.com/albums/li ...

  6. typecho路由机制详解

    本文介绍的是typecho的路由机制,引自 不烦恼路由机制是typecho的核心,有很多功能都是基于路由功能设计的,理解并熟悉TE的路由机制将非常有助于插件的开发. 完整的路由表如下: array ( ...

  7. asp.net MVC 路由机制

    1:ASP.NET的路由机制主要有两种用途: -->1:匹配请求的Url,将这些请求映射到控制器 -->2:选择一个匹配的路由,构造出一个Url 2:ASP.NET路由机制与URL重写的区 ...

  8. asp.net MVC 路由机制 Route

    1:ASP.NET的路由机制主要有两种用途: -->1:匹配请求的Url,将这些请求映射到控制器 -->2:选择一个匹配的路由,构造出一个Url 2:ASP.NET路由机制与URL重写的区 ...

  9. Swift 路由机制设计

    设计模式 APP设计模式多种多样,从最初的MVC到MVVM,再到MVP,VIPER等.越来越多的设计模式被开发出来并得以应用,但不论我们用到哪种设计模式,只需要记住高内聚.低耦合那边是好的设计模式.在 ...

随机推荐

  1. 基于新浪sae使用php生成图片发布图文微博

    1.生成图片的代码: <?php header ("Content-type: image/png"); mb_internal_encoding("UTF-8&q ...

  2. 文件I/O(不带缓冲)之read函数

    调用read函数从打开文件中读数据. #include <unistd.h> ssize_t read( int filedes, void *buf, size_t nbytest ); ...

  3. PAT 1006

    1006. Sign In and Sign Out (25) At the beginning of every day, the first person who signs in the com ...

  4. BugZilla的安装过程简明教程

    Bugzilla+Mysql+iis+perl模块+ ActivePerl 安装过程 (原:http://www.cnblogs.com/Warmsunshine/archive/2012/03/25 ...

  5. myql定义和查看语句

     创建数据库: create database IF NOT EXISTS MY_TEST default charset utf8  COLLATE utf8_general_ci; 查看SQL语句 ...

  6. Ⅱ.spring的点点滴滴--对象

    承接上文 对象的各种实例化 .net篇(环境为vs2012+Spring.Core.dll) 修改原来的PersonDao对象为 public class PersonDao : IPersonDao ...

  7. 报错---[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UIApplication.m:3294**

    原因: 新的SDK不允许在设置rootViewController之前做过于复杂的操作,导致在didFinishLaunchingWithOptions 结束后还没有设置rootViewControl ...

  8. Objective-C /iphone开发基础:分类(category,又称类别)

    在c++中我们可以多继承来实现代码复用和封装使程序更加简练.在objective-c中只能单继承,不能多继承,那么除了协议protocol之外,我们可以实现类似多继承的一个方法就是,分类(catego ...

  9. Linux上安装Squall

    Squall是Storm之上的类SQL查询工具,能够将类SQL语句转换成topology,然后提交给Storm运行. 安装Squall前要先安装Java和sbt(simple build tool), ...

  10. FIFO分枝_限界算法

    问题: 检索4-皇后问题的状态空间树如下图的基本过程.(4-皇后问题解空间的树结构,结点按深度优先检索编号)  如果按序扩展这些结点,则下一个E-结点就是结点2.扩展结点2后生成结点3,8和13.利用 ...