【ASP.NET MVC】 路由机制:命名路由
首先看一下命名路由和沒有命名的差別:
命名路由:
routes.MapRoute(name: "Test", // Route nameurl: "code/p/{action}/{id}", // URL with parametersdefaults: new { controller = "Section", action = "Index", id = UrlParameter.Optional } // Parameter defaults);
默認路由:
ASP.NET 中的路由機制沒有要求路由具有名稱,而且大多數情況下沒有名稱的路由也能滿足大多數應用場合。通常情況下,為了生成一個URL(統一資源定位符),只需要抓取事先已經定義好的路由值,并把他們交給路由引擎,剩下的就有路由引擎來處理,正如我們要介紹的,在有些情況下,使用這種方法在選擇生成URL的路由時會可能產生二義性。但給路由命名卻可以解決這個問題。
?
下面我們注冊兩個路由:
routes.MapRoute(name: "Test", // Route nameurl: "code/p/{action}/{id}", // URL with parametersdefaults: new { controller = "Section", action = "Index", id = UrlParameter.Optional } );routes.MapRoute(name:"Default", // Route nameurl:"{controller}/{action}/{id}", // URL with parametersdefaults:new { controller = "Home", action = "Index", id = UrlParameter.Optional } );為了在視圖中生成一個指向每個路由的超鏈接,我們在Home下面的Index頁面上加入下面代碼
@Html.RouteLink("Test",new{controller="Section",action="Index",id=123}) @Html.RouteLink("Default",new{controller="Home",action="Index",id=123})這里注意:上面兩個方法并不能確定使用哪個路由來生成URL,他們只提供了一些路由值,正如所期望的,第一個方法生成指向/code/p/Index/123的URL,第二個方法生成指向/Home/Index/123的URL.
對于上面的這些簡單實例而言,生成URL非常簡單,但是有些情形還是會令我們頭疼。
假設我們在路由列表的開始部分加入如下的頁面路由,為了使/aspx/Page.aspx/頁面處理/static/url
routes.MapPageRoute("new", "static/url", "~/aspx/SomePage.aspx");注意我們在實驗中不能將這個路由放在路由列表的末尾,否則他不能匹配傳入的請求,我們就看不到我們想要的效果。為什么會這樣呢?因為默認路由會在他之前與我們前面的那兩個路由匹配,因此我們要把該路由放到路由列表的開始部分。
?
那么將上面的路由放到路由列表的開始位置會有說明變化呢?對于傳入的請求而言,該路由只能匹配URL為/static/url的請求,而不匹配任何其它的請求,這也正是我們想要的。我們看一下我們點擊上面兩個超鏈接返回的URL都是不可用的:
/static/url?controller=Section&action=Index&id=123
/static/url?controller=Home&action=Index&id=123
通常情況下,當使用路由機制生成URL時,我們提供的路由值被用來填充URL參數,但是我們可以看到上面這個路由根本沒有URL參數("/static/url"),因此他可以匹配每一個可能生成的URL,也就是我們上面兩個鏈接都匹配了這個路由,所以生成了沒有用的URL。
這時我們可以指定路由名稱,不僅可以避免二義性,甚至在某種程度上提高性能,因為路由引擎可以直接定位到指定的路由,并嘗試用它來生成URL。
在前面的實例中,我們生成了兩個鏈接,下面我們做些修改,就可以看到命名路由的優點了(下面的代碼使用了命名參數):
@Html.RouteLink(linkText:"route:test",routeName:"test",routeValues:new{controller="section",action="index",id=123}) @Html.RouteLink(linkText:"Default",routeName:"Default",routeValues:new {controller="Home",action="index",id=123})這樣我們就可以正確找到路由了."人們的名字是他們命運的縮寫"。這句話同樣使用與生成URL的路由。
轉載于:https://www.cnblogs.com/wywnet/p/3415905.html
總結
以上是生活随笔為你收集整理的【ASP.NET MVC】 路由机制:命名路由的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mahout系列之----共轭梯度预处理
- 下一篇: [Umbraco] 创建第一个页面