大家好,這一篇向大家介紹ASP.NET MVC路由機制。【PS:上一篇-->6. ASP.NET MVC 5.0中的HTML Helpers【HTML幫助類】 】
路由是一個模式匹配系統,它確保你能夠將瀏覽器的請求,傳遞到控制器特定的Action方法上。路由引擎使用路由表,來將瀏覽器發送來的請求URL和路由表中定義的URL進行匹配。RouteConfig文件用來添加路由規則,路由是調用控制器和Action的方式。
我們在Global.asax文件中注冊路由:通過在Application_Start方法中調用RegisterRoutes方法來注冊路由。路由用於創建用戶友好的URLs.路由可以設置程序啟動頁面,就像ASP.NET Web Forms 這樣。路由系統能夠使我們能夠創建任何您想要的url,並以清晰和簡潔的方式表達它們。
下面是路由引擎來執行路由,路由系統根據,用戶請求的URL,來匹配路由表。如果找到了,就繼續處理,沒找到就拋異常。當ASP.NET 路由引擎在運行的時候收到了這個請求,然后就會為請求的URL,在路由表中找到匹配的規則,如果找到了 ,請求就會接着轉到相應的控制器中,否則就會報HTTP 404錯誤。
下面的圖片中,chapters是控制器,speakers是方法,Actions是可選的,這個URL匹配的是Home/Action這個路由規則,其中Action是Home控制器中的方法,還有路由你可以進一步配置一個可選參數ID,用來指向特定的數據。這就是為什么路由引擎知道哪些參數是可選的了。
現在理論知識了解差不多了,我們來看看怎么給MVC應用程序添加路由,以完成從控制器到Action的映射。我們來創建一個項目,動手實踐一下:
創建一個空模板的MVC應用程序。
每一個MVC應用程序都默認創建了路由配置文件RouteConfig,里面有默認的實現。我們來看看:
可以看到RouteConfig類有一個靜態的RegisterRoutes方法,這個方法在我們程序啟動的時候,從Global.asax文件中進行注冊。除此之外,任何帶有.axd的請求,就會被IgnoreRoute進行捕捉,而交給程序的其他處理機制進行處理。我們可以這樣說,IgnoreRoute用來阻止特殊的路由表,例如Web.Config,圖片文件等等。
MapRoute方法是一個擴展方法,意味着方法已經在路由集合中定義了。代碼里面定義了默認的路由規則,默認的路由名稱是”Default“,指向的是Home控制器,Index方法,還有一個可選的id參數。
路由表在Golbal.asax文件中進行注冊,當程序啟動的時候,Application_Start方法被調用,然后就進行路由注冊。
基本的默認路由配置介紹完了,我們怎么創建自己的路由規則呢?
首先,我們創建一個Author控制器,然后修改一下里面的代碼:
然后創建AuthorDetail視圖,寫入下面的代碼:
現在打開RouteConfig文件,創建一個新的路由--【Author】
運行項目:
然后再瀏覽器的URL中輸入9:
現在以QueryString方式,在瀏覽器中輸入:
還可以在方法上標注調用的是哪個路由:
看這里我們,就創建了一個路由了Author。大家學會了么?