概述

主要分为四个部分进行分析。

First ——Usage;

then ——Extension;

and then ——Design;

last ——Test。

1. Usage

1.1 Display RouteData的值

MVC针对每一个请求,都会将请求转化为一个RouteData对象,添加到全局路由表中。

RouteData是一个包装类,可以打印其Values和DataTokens。

Eg1:

<tr>
<td>Values:</td>
<td>
<ul>
<% foreach (var tmp in RouteData.Values)
{
%>
<li>
<%= tmp.Key %> = <%= tmp.Value %>
</li>
<%
} %>
</ul>
</td>
</tr>
<tr>
<td>DataTokens:</td>
<td>
<ul>
<% foreach (var tmp in RouteData.DataTokens)
{
%>
<li>
<%= tmp.Key %> = <%= tmp.Value %>
</li>
<%
} %>
</ul>
</td>
</tr>

Eg2:

public ActionResult RouteDemo()
{
foreach (var route in RouteTable.Routes)
{
var data = route.GetRouteData(HttpContext);
Console.WriteLine(route.GetType().FullName);
}
return View();
}

1.2路由到物理文件

使用MapPageRoute方法完成此项功能。

步骤:

l 定义URL模板;

l 创建defaults字典;

l 创建dataTokens字典;

l 创建constraint字典;

l 调用MapPageRoute方法

var defaults = new RouteValueDictionary();
defaults.Add("areacode", "");
defaults.Add("days", ""); var constraints = new RouteValueDictionary();
constraints.Add("areacode", @"0\d{2,3}");
constraints.Add("days", @"[1-3]{1}"); var dataTokens = new RouteValueDictionary();
dataTokens.Add("defaultCity", "深圳");
dataTokens.Add("defaultDays", ""); RouteTable.Routes.MapPageRoute("default", "{areacode}/{days}", "~/Views/Home/RouteDemo.aspx", false, defaults, constraints, dataTokens);

1.3路由忽略

调用Ignore方法

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{filename}.css/{*pathInfo}"); //忽略*.css文件的路由

1.4直接注册路由

MapRoute方法实质上就是将路由对象(RouteBase的子类,如Route)添加到路由表中,故而可以直接添加。

Route route2 = new Route("{areacode}/{days}", defaults, constraints, dataTokens, new PageRouteHandler("~/Views/Home/RouteDemo.aspx"));
RouteTable.Routes.Add(route2);

1.5缺省URL参数

id = UrlParameter.Optional

表明最后一个参数是可选的。此处可以猜测,存在一个解析器来判断UrlParameter。

敬请期待~~

MVC 路由模块分析(一)的更多相关文章

  1. ASP.NET MVC中分析淘宝网页发生乱码标题搞定方法

    ASP.NET MVC中分析淘宝网页发生乱码标题搞定方法 近来正在分析淘宝中商品的信息,效果发生乱码,如: 原因便是中文字符格式发生冲突,ASP.NET MVC 默认采用utf-8,可是淘宝网页采用g ...

  2. MVC组件分析

    MVC组件分析   2 System.Web.Mvc V 4.0.0.0 组件分析 2.1 Routing组件(路由选择) Routing的作用就是负责分析Url Action的要求• 必须是一个公有 ...

  3. ASP.NET CORE MVC用时分析工具MiniProfiler

    ASP.NET CORE MVC用时分析工具MiniProfiler MiniProfiler(https://miniprofiler.com/)是一个轻量级且简单易用的分析工具库,它可以用来分析A ...

  4. 老罗学习MVC之旅:MVC组件分析

    2System.Web.Mvc V 4.0.0.0 组件分析 2.1 Routing组件(路由选择) Routing的作用就是负责分析Url   Action的要求• 必须是一个公有方法• 必须返回A ...

  5. Cocoa的MVC架构分析 cocoa的mvc实现

    Cocoa是Mac OS和iPhone OS上的开发框架,使用Objective-C做为开发语言.当然,在代码中也可以嵌入C和C++的语句.初识Objective-C时会觉得它的语法很奇怪,但本质上和 ...

  6. MVC组件分析(转)

    2System.Web.Mvc V 4.0.0.0 组件分析 2.1 Routing组件(路由选择) Routing的作用就是负责分析Url Action的要求• 必须是一个公有方法• 必须返回Act ...

  7. Cocoa的MVC架构分析

    Cocoa是Mac OS和iPhone OS上的开发框架,使用Objective-C做为开发语言.当然,在代码中也可以嵌入C和C++的语句.初识Objective-C时会觉得它的语法很奇怪,但本质上和 ...

  8. Spring Mvc原理分析(一)

    Servlet生命周期了解 Servlet的生命(周期)是由容器(eg:Tomcat)管理的,换句话说,Servlet程序员不能用代码控制其生命. 加载和实例化:时机取决于web.xml的定义,如果有 ...

  9. Autofac.Integration.Mvc.Owin分析

    using System; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Secur ...

随机推荐

  1. [Effective JavaScript 笔记]第61条:不要阻塞I/O事件队列

    js程序是构建在事件之上的.输入可能来自不同的外部源.在一些语言中,我们习惯地编写代码来等待某个特定的输入. var text=downloadSync('http://example.com/fil ...

  2. NOIP 2014 pj & tg

    由于我太弱,去了pj组= = ============================== T1: 傻逼暴力 T2: 傻逼暴力+判断+更新 T3: 手画一下就知道了.算出这个点在第几圈,再使劲yy下在 ...

  3. DOS命令符基本操作

    怎么改变DOS默认路径 开始->所有程序->附件->命令提示符,在“命令提示符”上右键,选择“属性”,(或者在快捷方式上点击属性)会弹出一个“命令提示符 属性”对话框,可以通过修改该 ...

  4. Best Time to Buy and Sell Stock | & || & III

    Best Time to Buy and Sell Stock I Say you have an array for which the ith element is the price of a ...

  5. 29.调整数组顺序使奇数位于偶数前面[ReOrderArray]

    [题目] 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分.要求时间复杂度为O(n). [分析] 如果不考虑时间复杂度,最简单的思路应该是从头扫描这个 ...

  6. 12.从上往下遍历二元树[LevelOrderOfBinaryTree]

    [题目] 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印. 例如输入 8    /  \   6    10  /\     /\ 5  7   9  11 输出8    ...

  7. 搭建CAS单点登录服务器

    最近公司的一个项目需要用到单点登录的功能,之前对单点登录了解得不多.于是网上找了下单点登录的解决方案,发现CAS是个不错的解决方案.于是搭个环境测试了一下.这里记录下测试的详细步骤. 官网:http: ...

  8. poj 1363 Rails 解题报告

    题目链接:http://poj.org/problem?id=1363 题意:有一列火车,车厢编号为1-n,从A方向进站,向B方向出站.现在进站顺序确定,给出一个出站的顺序,判断出站顺序是否合理. 实 ...

  9. jsp页面之间传参用el表达式获取

    jsp页面之间传参用el表达式获取 参数方法:${param.参数名} session方法:${session.变量名}

  10. Java性能优化权威指南-读书笔记(三)-JVM性能调优-内存占用

    新生代.老年代.永久代的概念不多说,这三个空间中任何一个不能满足内存分配请求时,就会发生垃圾收集. 新生代不满足内存分配请求时,发生Minor GC,老年代.永久代不满足内存分配请求时,发生Full ...