好的URL可以簡單清楚的表達出要取得的資源是什麼, 也可以提高搜尋引擎的排名. 如何在asp.net MVC中設計出好的routing, 得到好的URL是很重要的課題.
預設的Routing
參考Codeproject的Routing in MVC的解釋
其中URL的部份, 在大括號中的叫placeholder, 若有不在大括號中的字叫literal。placeholder中的值是可變的, literal的值是不可變的, 在之後的例子中就可以看到範例.
舉例來說, 假如client發出以下的requesthttp://server/application/Products/show/beveragesProducts會對應到controller, show會對應到action, beverages對應到id.
Routing pattern和有效的URL
限制Routing參數格式
有時會需要限制routing的參數以避免不必要的存取. 舉例來說,我們希望傳入的參數一定要是數字, 在設定routing時可以加上constrains屬性, 並對id做限制:routes.MapRoute(另一個例子
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
//http://localhost:49818/Home/Routing/1 -> 有效
//http://localhost:49818/Customer/Routing/1 -> 有效
constraints: new { id = @"\d+"}
//也可限制controller的名稱
//http://localhost:49818/Customer/Routing/1 -> 無效
//http://localhost:49818/Home/Routing/1 -> 有效
//constraints: new { id = @"\d+", controller = "Home"}
);
routes.MapRoute(
name: "BlogPost",
url: "posts/{year}/{month}/{id}",
defaults: new { controller = "Customer", action = "Post", id = UrlParameter.Optional },
//http://localhost:49818/posts/1908/11 -> 有效
constraints: new { year = @"\d{4}", month = @"\d{2}"}
);
自訂Routing要注意的部份
在RouteConfig.cs中新增所需要的routing, 要注意它是有順序性的. 也就是說含括範圍較小的routing設計要放在前面, 因為一旦先找到了符合的routing, 就不會再繼續比下一個了.IgnoreRoute的設定
可以設定什麼樣的routing pattern要被忽略不要處理.
延伸閱讀
MvcRouteTester : 提供routing unit test的函式庫
沒有留言:
張貼留言