網址路由詳細內容

前幾篇有大概簡單的講到路由,此篇將會進一步解說詳細內容

先來看看路由的設定檔內容:App_Start\RouteConfig.cs

1.RegisterRoute(RouteCollection routes)

這是執行Web的入口點,會接收從Global.asax傳來的RouteTable.Routes的靜態方法

2.IgnoreRoute()

用來定義不要透過網址路由處理的網址,將不會進入MVC的執行生命週期,將由IIS的其他HTTP模組處理

3.{resource}.axd

resource代表一個RouteValue的路由變數名稱,可以取任何名字替代,就只是代表一個位置而已

{resource}.axd代表意思是所有*.axd的網址都不透過MVC來執行,例如Web Form就是常見的.axd,所以必須排除

4.{*pathInfo}

也是一個路由變數名稱,定義的意思是只要網址有.axd,後面出現的任何路經都直接跳過

5.MapRoute

用來定義網址路由擴充方法

6.name

定義Route名稱,預設是Default

7.url

定義url樣式與路徑段落的參數名稱,例如/Home/Index/1111

8.defaults

當網址路由比對不到網址會進入到這裡嘗試比對是否有符合的Controller與Action可以執行

URL與路由的比對

1.比對的順序是由上而下逐一比對

ex:http://127.0.0.1/abc.axd

此URL在IgnoreRoute比對成功,將不會丟給MVC執行,會重新返回給IIS的其他HTTP模組

ex:http://127.0.0.1/Home/details?id=0001

此URL在IgnoreRoute沒有比對成功所以會進入到MapRoute(),Controller/Action/都比對成功但因?id=0001是QueryString不屬於路由範圍,所以路由會比對default的設定,也就是UrlParameter.Optional,所以最終會比對成功進入MVC執行週期

2.MapRoute的條件約束

在MapRoute可以加上第四個參數constraints來限制路由條件

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                constraints: new {id=@"\d+"}//id參數只接受數字
            );