標籤:
Routing:首先擷取視圖頁面傳過來的請求,並接受url路徑中的controller和action以及參數資料,根據規則將識別出來的資料傳遞給某controller中的某個action方法
MapRoute()有6個方法可以重載
方法1:系統提供的預設路由規則格式
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default",//路由名稱 url: "{controller}/{action}/{id}",//帶有參數的url defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }//參數預設值 ); }
url格式為:http://localhost:0000/Home/Index 對於規則為{controller}/{action}/{id} 黑色部分就是對應部分
詳細匹配為:http://localhost:0000/Home/Index/1 通過Routing組件分析該url controller為Home action為Index 參數為Id為1 使用了MapRoute( string name, string url, object defaults);這個方法的重載。
方法:2:不使用預設值的url路由規則
函數頭:MapRoute( string name, string url);
routes.MapRoute("沒有預設值路由規則", "{controller}/{id}-{action}");
適合的Url例子:http://localhost:0000/Custom/1-Detials
它將不匹配http://localhost:0000/
方法3:帶有命名空間的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[]{"mymvc.Controllers"}//命名空間
);
Url:http://localhost:0000/Custom/1-Detials
這個例子是帶命名空間的路由規則,這在Aeras使用時非常有用。
方法4:帶有約束的路由規則
函數頭: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
方法5:帶有命名空間,約束,待預設值的路由規則
函數頭: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
方法6:捕獲所有的路由
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路由了。
MVC中url路由規則