MVC 路由模块分析(一)
2024-10-13 07:41:53
概述
主要分为四个部分进行分析。
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。
敬请期待~~
最新文章
- 试图加载格式不正确的程序。 (异常来自HRESULT:0x8007000B)
- 更改SQL Server 数据库的排序规则
- Maven基础笔记,原理
- POJ C程序设计进阶 编程题#2: 配对碱基链
- zTree实现基本树
- EBS-PAC成本更新事务处理
- Linux cp -a用法
- Android: Receiving Data from the Send Intent,自己app注册系统分享
- Java数据结构与算法(2) - ch03排序(冒泡、插入和选择排序)
- 首页音乐播放器添加";多首音乐";
- 【JAVA零基础入门系列】Day15 对象的比较
- XCTF体验题库 : ReverseMe-120
- linux系统 之 git
- linux 2.6.32.220的一个crash记录
- scala 学习笔记十二 继承
- matplotlib中的legend()&mdash;&mdash;用于显示图例
- hapi lab测试框架简单使用
- java中的集合类总结
- 数据泵导出oracle 10g数据库
- poj3411