MVC文章-『Routing網址路由流程』

MVC文章-『Routing網址路由流程』

 

 

skitch

MVC基本的路由流程如上圖,首先瀏覽器會向伺服器發出Request,這時會先由IIS接受到這個封包,

然後再轉給Route路由負責決定要將此要求交由那個HttpHandler來處理。如果是MVCHandler來處理,

這時就會進入ASP.NET MVC的執行生命週期。

 

 

我們此處從程式碼來說明瀏覽器向伺服器發出Request後程式會著麼跑。

 


 

Step1.

發出Request,localhost:32522

ScreenClip

 


 

Step2.(第一次執行時)

執行Gloabal.aspx中的RouteConfig.RegisterRoutes來定義Route比對規則,並將Route規則加入至

RouteTable中。

RouteTable.Routes是為公開的靜態物件,用來儲存所有的Routing規則,其物件型別為RouteCollection。

ScreenClip

 

其中RouteConfig.RegisterRoutes在App_Start下面。

ScreenClip

 

執行RegisterRoutes前,RouteTables還是空的。

ScreenClip

 

執行後可以看到RegisterRoutes增加了兩條規則。

ScreenClip

 


 

Step3.

 

Route Handler會自動將請求的網址拿來與RoutesTable進行比對。

我們先來看看預設的Route規則第一行。

ScreenClip

IgnoreRoute :

這個方法用途是『忽略』比對到的網址,忽略的意思是不進入MvcHandler 會當成一般的ASP.NET網頁來執行。

 

resource 、pathInfo  :

你可以想成一個用來替代的符號(沒有意義)。

 

*pathInfo :

加*號網址是指, test.asd/detail/sports/3 ,如果沒加*號,則只會比對到『detail』,如果有加*號,是代表全部。

 


 

我們在MapRoute方法中多加一行contraints,主要是用來限制某些條件,才能比對該項規則。

ScreenClip

 

MapRoute :

MapRoute的方法則是拿來定義URL Routing的擴充方法

 

Name :

Route的名稱,此名稱必須是唯一的。

url :

定義URL Routing 的樣式,其中被{}包住的變數除了controller和action,後面的都可以依據自已的需要自定義。

 

defaults :

當傳入的網址比對不到的時候,就會依據default定義的值替代,在這裡要特別提到其中id的設定。

 

UrlParamreter.Optional:

這個意思為即使網址中沒有id也會預設通過。

 

constraints :

代表只有About或contact事件(範例) 才會比對。

 

其中constraints也可以運用Regular Expression來進行限制。

例如constraints: @”\d+”就代表{id}路由值的內容必須全為數字才算成功比對。

 

 


 

注意:

URL Routing 是由上而下比對

ScreenClip

Ex.http://localhost:32522/contact/1

比對順序

1.比對routes.IgnoreRoute格式{resource}.axd/{*pathInfo}

比對要求的URL第一部份為contact,沒有比對到.axd,比對失敗。

2.比對routes.MapRoute的{action}/{id}格式。

比對要求的URL第一部份contact,並且比對到{action}同時也符合限制條件。

比對要求的URL第二部份1,並且比對到{id}。

 

比對結果

該網址以routes.MapRoute擴充方法進行比對成功,因此Routing模組將會把此次的請求,

委託給MmvcHandler負責處理。

 


 

參考資料

http://blog.miniasp.com/post/2011/08/01/ASPNET-MVC-Developer-Note-Part-21-Routing-Concepts-and-Skills.aspx

http://www.dotblogs.com.tw/lastsecret/archive/2010/02/27/13798.aspx

http://demo.tc/Post/786

 

書籍

ASP.NET MVC4開發實戰(保哥)

ASP.NET MVC4網站開發美學

 

 



小弟才書學淺~請各位客官指教指教~~~

小弟日 : 你要知道自已不是帥哥,你才有可能變成帥哥 。