这是一个像你这样的路线的例子,对数量有限制:
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”,他们将不会点击 Question 操作,并通过它,因为它失败了参数约束。如果需要,您可以在包罗万象/默认路由中进一步处理它:
routes.MapRoute(
"Catchall",
"{*catchall}", // This is a wildcard routes
new { controller = "Home", action = "Lost" }
);
这会将用户发送到 Home 控制器中的 Lost 操作。可以在此处找到有关通配符的更多信息。
注意:Catchall 应该作为 LAST 路由驻留。考虑到 ASP.NET MVC 中路由的惰性特性,将其置于链的更上方意味着它将处理其下方的所有其他路由。