主要分為四個部分進行分析。
First ——Usage;
then ——Extension;
and then ——Design;
last ——Test。
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();}
使用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);
調用Ignore方法
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.IgnoreRoute("{filename}.CSS/{*pathInfo}"); //忽略*.css文件的路由
MaPRoute方法實質上就是將路由對象(RouteBase的子類,如Route)添加到路由表中,故而可以直接添加。
Route route2 = new Route("{areacode}/{days}", defaults, constraints, dataTokens, new PageRouteHandler("~/Views/Home/RouteDemo.aspx"));RouteTable.Routes.Add(route2);
id = UrlParameter.Optional
表明最后一個參數是可選的。此處可以猜測,存在一個解析器來判斷UrlParameter。
敬請期待~~
新聞熱點
疑難解答