概述

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

First ——Usage;

then ——Extension;

and then ——Design;

last ——Test。

1. Usage

1.1 Display RouteData的值

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

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

Eg1:

  1. <tr>
  2. <td>Values:</td>
  3. <td>
  4. <ul>
  5. <% foreach (var tmp in RouteData.Values)
  6. {
  7. %>
  8. <li>
  9. <%= tmp.Key %> = <%= tmp.Value %>
  10. </li>
  11. <%
  12. } %>
  13. </ul>
  14. </td>
  15. </tr>
  16. <tr>
  17. <td>DataTokens:</td>
  18. <td>
  19. <ul>
  20. <% foreach (var tmp in RouteData.DataTokens)
  21. {
  22. %>
  23. <li>
  24. <%= tmp.Key %> = <%= tmp.Value %>
  25. </li>
  26. <%
  27. } %>
  28. </ul>
  29. </td>
  30. </tr>

Eg2:

  1. public ActionResult RouteDemo()
  2. {
  3. foreach (var route in RouteTable.Routes)
  4. {
  5. var data = route.GetRouteData(HttpContext);
  6. Console.WriteLine(route.GetType().FullName);
  7. }
  8. return View();
  9. }

1.2路由到物理文件

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

步骤:

l 定义URL模板;

l 创建defaults字典;

l 创建dataTokens字典;

l 创建constraint字典;

l 调用MapPageRoute方法

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

1.3路由忽略

调用Ignore方法

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

1.4直接注册路由

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

  1. Route route2 = new Route("{areacode}/{days}", defaults, constraints, dataTokens, new PageRouteHandler("~/Views/Home/RouteDemo.aspx"));
  2. 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. Swift Tour 随笔总结 (1)

    let Constant var Variable let implicitInteger = 70 let implicitDouble = 70.0 let explicitDouble: Dou ...

  2. LR监控Windows资源

    1.监控准备: 监控方: 1)安装tcp/ip协议下的netbios 2)用administrator登录 被监控方: 1)被监控的Windows开启两个服务: Remote ProcedureCal ...

  3. Sixth scrum meeting - 2015/10/31

    概述 今天是周末,我们小组由于之前拖延的比较久,所以今天仍然在努力的开发…… 目前开发已经到了中期阶段,今天遇到了一个问题就是,由于小组的某些同学对git的使用不太熟悉,导致在git push的时候遇 ...

  4. Unity 烘焙材质到单一贴图的脚本

    原地址:http://www.cocoachina.com/gamedev/gameengine/2011/0406/2756.html 这个脚本由 CocoaChina 版主 “四角钱” 分享,可以 ...

  5. Class Methods & Variables

    When calling an instance method like withdraw_securely, the syntax generally looks something like th ...

  6. [BZOJ2683][BZOJ4066]简单题

    [BZOJ2683][BZOJ4066]简单题 试题描述 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x ...

  7. win10 x64下安装oracle 12c出现[INS-30131]报错的解决方案

    解决方案: 第一步:控制面板>所有控制面板项>管理工具>服务>SERVER 启动 第二步:控制面板>所有控制面板项>管理工具>计算机管理>系统工具> ...

  8. 2模02day1题解

    源文件在我的网盘上.链接:http://pan.baidu.com/s/1qWPUDRm 密码:k52e (只有机智的人才能看到我的链接) 机智的双重下划线~~~ T1 T1就是一个递推,这题目把我恶 ...

  9. BADIP filter

    #!/bin/bash touch /tmp/badipnew.log;touch /tmp/newip.log; if [ ! -f "/tmp/badip.log" ];the ...

  10. 【Django】如何自定义manage.py命令? 达到启动后台进程的目的?

    代码: #-*- coding:utf- -*- """ The handle active user mail send """ from ...