這裏有你們這樣一個路徑的一個例子,對數量的限制:
routes.MapRoute(
"Question",
"questions/{questionID}",
new { controller = "StackOverflow", action = "Question" },
new { questionID = @"\d+" } //Regex constraint specifying that it must be a number.
);
這裏我們設置questionID至少有一個數字。這也將阻止任何包含除了整數之外的任何URL,並且也阻止需要可爲空的int。
注意:這沒有考慮到大於Int32範圍的數字(-2147483647 - +2147483647)。我將此作爲練習留給用戶解決。 :)
如果用戶輸入URL「questions/foo」,他們將不會遇到問題操作,並且通過它,因爲它沒有參數約束。如果需要,您可以在catchall/default路徑中進一步處理它:
routes.MapRoute(
"Catchall",
"{*catchall}", // This is a wildcard routes
new { controller = "Home", action = "Lost" }
);
這會將用戶發送到Home控制器中的Lost操作。有關通配符的更多信息可以參見here。
注意:Catchall應該作爲LAST路線。考慮到ASP.NET MVC中路由的惰性,將它放在鏈的更上方意味着這將處理其下的所有其他對象。
這看起來像是一個很好的方式來處理瘋狂的用戶=) – JOBG 2009-08-20 22:13:46