本篇主要講述Routing組件的作用,以及舉幾個執行個體來學習Asp.Net MVC2.0 Url路由技術。
接著上一篇開始講,我們在Global.asax中註冊一條路由後,我們的請求是怎麼轉到相應的View的呢?Controller和Action是怎麼解析的?這就是Routing組件乾的事情了。
Routing的作用:它首先是擷取到View傳過來的請求,並解析Url請求中Controller和Action以及資料,其次他將識別出來的資料傳遞給Controller的Action(Controller的方法)。這是Routing組件的兩個重要的作用!
下面我們從幾個例子來講解一下Url路由的使用。
MapRoute()有6個方法可以重載,下面舉5個例子相應介紹!
執行個體一:首先講解的是系統預設提供的路由格式,下面是系統給的預設代碼:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // 路由名稱 "{controller}/{action}/{id}", // 帶有參數的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數預設值 ); }
Url格式為:http://localhost:0000/home/index 對應規則為:{controller}/{action}/{id} 黑體部分就是對應部分。這還是有預設值的情況。
詳細匹配應該為:http://localhost:0000/Custom/Detials/1 去掉主機網域名稱,剩下的對應就是匹配Controller和actiong了。通過Routing組件解析這個Url,Controller是Custom,Action是Detials。傳遞過去的Id是1。
這就是使用了MapRoute( string name, string url, object defaults);這個方法的重載。
執行個體二:不使用預設值的Url路由規則
函數頭:MapRoute( string name, string url);
routes.MapRoute("沒有預設值路由規則", "{controller}/{id}-{action}");
適合的Url例子:http://localhost:0000/Custom/1-Detials
它將不匹配http://localhost:0000/
執行個體三:帶名稱空間的Url路由規則
函數頭:MapRoute( string name, string url, string[] namespaces);//路由名,Url規則,名稱空間
routes.MapRoute(
"MyUrl", // 路由名稱
"{controller}/{id}-{action}", // 帶有參數的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // 參數預設值
new string[] { "MvcDemo.Controllers" }//命名空間
);
Url:http://localhost:0000/Custom/1-Detials
這個例子是帶命名空間的路由規則,這在Aeras使用時非常有用。不多說,後面再說!
執行個體四:帶約束的路由規則
函數頭:MapRoute( string name, string url, object defaults, object constraints);//路由名,Url規則,預設值,名稱空間
routes.MapRoute(
"Rule1",
"{controller}/{action}-{Year}-{Month}-{Day}}",
new { controller = "Home", action = "Index", Year = "2010", Month = "04", Day = "21" },
new { Year = @"^\d{4}", Month = @"\d{2}" }
);
Url:http://localhost:14039/home/index-2010-01-21
執行個體五:帶名稱空間,帶約束,帶預設值的路由規則
函數頭:MapRoute( string name, string url, object defaults, object constraints, string[] namespaces);
routes.MapRoute(
"Rule1",
"Admin/{controller}/{action}-{Year}-{Month}-{Day}",
new { controller = "Home", action = "Index", Year = "2010", Month = "04", Day = "21" },
new { Year = @"^\d{4}", Month = @"\d{2}" },
new string[] { "MvcDemo.Controllers" }
);
Url:http://localhost:14039/Admin/home/index-2010-01-21
執行個體六:捕獲所有的路由
routes.MapRoute(
"All", // 路由名稱
"{*Vauler}", // 帶有參數的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數預設值
);
關於Global.asax剩餘部分的說明:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");是忽略這個規則的Url
AreaRegistration.RegisterAllAreas();//註冊所有的Areas
RegisterRoutes(RouteTable.Routes);//註冊我們寫的規則
//RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);//調試用語句,需要下載RouteDebug.dll,並添加引用!加入這句話後就可以測試Url路由了。
初識Asp.Net MVC2.0初識Asp.Net MVC2.0【續】
Asp.Net MVC2.0 Url 路由入門---執行個體篇
Asp.Net MVC2.0 Url 路由入門
Asp.Net MVC3 簡單入門第一季(一)環境準備
Asp.Net MVC3 簡單入門第一季(二)詳解Asp.Net MVC3項目
Asp.Net MVC3 簡單入門第一季(三)詳解Controller之Filter
Asp.Net MVC3 簡單入門第一季(四)詳解Request Processing Pipeline