Asp.Net MVC2.0 Url 路由入門---實例篇
本篇主要講述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 MVC3 簡單入門第一季(二)詳解Asp.Net MVC3項目

浙公網安備 33010602011771號