使用路由,先引用 "System.Web.Routing",
1、Routing的作用(根據識別出來的數據,將請求傳遞給Controller和Action)。
1.1、確定Controller(控制器)。
1.2、確定Action(方法)。
1.3、確定其他參數。
2、理解默認的路由規則。
在App_Start文件夾中有一個RouteConfig.cs的類,里面有一個默認的路由規則。
當一個MVC應用程序首次運行時,會調用Application_Start()方法,這個方法隨后調用了RegisterRoutes()方法。RegisterRoutes()方法創建了路由表。
默認的路由表包含了一個路由(路由名是Default)、Default路由將Url的第一部分映射到控制器名,Url的第二部分映射到控制器動作,第3部分映射到一個叫id的參數。
假設在瀏覽器的地址欄中輸入/Home/Index/5,默認地將參數映射成下面的內容:
Controller = Home
Action = Index
id = 5
當你請求URL /Home/Index/5時,將會執行這行代碼:HomeController.Index(5)
Default路由包含了所有三個參數的默認默認值,如果不提供控制器,那么控制器的參數默認為Home,如果不提供動作,動作參數默認值為Index,如果你不提供id,id參數默認為空字符串。
例子練習1:
在地址欄中輸入域名/Home
由於Default路由參數的默認值,輸入這個Url會調用HomeController控制器中的Index()方法,並使用空字符串作為Id的參數值。
例子練習2 (不含參數的Index動作):
地址欄中輸入域名/Home
當在瀏覽器地址欄中輸入域名/Home的時候會調用Index這個方法,那么這個id將被忽略。
例子練習3(使用可空參數的Index動作):
Index()方法擁有一個整數參數。因為這個參數是一個可空參數(可以擁有Null值),因此可以調用Index()而不會引發錯誤。
例子練習4(含有Id參數的Index動作)
這個時候如果再使用 域名/Home的方式去訪問,異常原因是id為null,需要為其賦值。就會報錯,異常如下:
正確訪問方式是:域名/Home/Index/5
3、創建自定義路由。
當在瀏覽器地址欄中輸入 域名/Product/Pro的時候,自定義路由將收到的客戶端請求映射到名為Pro的控制器,然后進行匹配,匹配失敗后執行默認的參數項,就調用了Pro控制器中的Index方法。
4、創建路由約束。
根據上面的圖3.1可得出,控制器為Pro的路由默認執行的方法是Details()方法、根據圖3.2可看出Pro控制器中有一個Details()方法,里面需要一個int類型的參數。
當在瀏覽器地址欄中輸入 域名/Pro/2 的時候會自動執行Details中的方法,然后找到Details視圖。
當在瀏覽器地址欄中輸入 域名/Pro/ABC,會出現以下異常信息。
根據路由規則只是想匹配包含合適整數prouctId的Url,在定義路由來限制與路由相匹配的Url時,可以使用約束。修改路由約束為:
這個時候在瀏覽器地址欄中輸入 域名/Product/ABC的時候,不會再拋出圖3.3的異常了,這個時候會彈出來一個404的錯誤。