MVC 路由模块分析(一)概述主要分为四个部分进行分析。
First ——Usage;
then ——Extension;
and then ——Design;
last ——Test。
1. Usage1.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。
敬请期待~~