一,基本概念:
1,路由的組件是System.Web.Routing,它是同.net 3.5 sp1一起發布的;所以此組件不開放原始碼。
2,在ASP.NET webform也可以使用該組件;
2,ASP.NET MVC中對其進行了擴充,定義規則,使用新的“MapRoute”輔助方法,它提供了極其簡單的句法,但能做同樣的事。
二,Routing的作用:
從可以看出,Routing用於
1,定義如何選擇Controller類,
2,定義調用哪個Action方法,
3,以及從URL/Querystring中自動解析變數值,並作為參數傳遞給方法。
下一步,控制器會執行對應的方法。
三,Routing的配置:
1,配置。通常,我們通過在Global.asax檔案中的Application_Start事件中添加routes來配置Routing規則,
Global.asax.cs檔案中的代碼:
public static void RegisterRoutes(RouteCollection routes)
{
//忽略對.axd檔案的Route,也就是和WebForm一樣直接去訪問.axd檔案
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route 名稱
"{controller}/{action}/{id}", // 帶有參數的URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數預設值,id為選擇性參數
//在URL沒有指定時controller = Home, action = Index ,id=""
);
//可以通過routes.MapRoute()添加多個規則,
//規則的順序很重要,根據Route的定義順序來自上而下匹配的,找到符合的就不向下執行了。
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
//在程式啟動的時候註冊我們前面定義的Route規則
RegisterRoutes(RouteTable.Routes);
}
2,規則對應的URL:
在一個route中,通過在大括弧中放一個預留位置來定義( { and } ),route定義中不在大括弧中的資訊則作為常量值。
為{controller}/{action}/{id}規則下,不同的URL請求的傳回值。
另外,還可以使用星號(*)匹配不確定個數的參數,這會匹配URL後面所有的剩餘的參數。例如:
query/{queryname}/{*queryvalues}規則對於url:
query/aspnetmvc/preview5/routing ,則queryvalues參數匹配的參數為值為 preview5/routing。
3,參數說明:
MapRoute()輔助方法是重載了的,可以接受2,3,或4個參數(路徑名字,URL句法,URL預設參數,URL參數Regex約束)。
例如:
routes.MapRoute(
"Default", //名稱隨便命名,但是上下文中不能重複
"{controller}/{action}/{id}", //URL句法
new { controller = "Home", action = "Index", UrlParameter.Optional }, //URL預設參數,
new { id = @"[/d]*" } //id必須為數字,更複雜的約束可以通過擴充來實現
);
四,Routing與URL Rewrite的區別:
1,URL Rewrite:改變程式處理的URL
2,URL Route:根據URL的規則選擇執行
3,兩者執行機制不同
4,在某些情況下可以產生同樣結果
5,URL Route更像是一種基礎支援
– 適合用於開發基於ASP.NET架構的新架構