MVC 路由模块分析(一)
概述
主要分为四个部分进行分析。
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", "010"); defaults.Add("days", "2"); 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", "200000"); 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。
敬请期待~~