【发布时间】:2011-05-23 04:30:12
【问题描述】:
我在我的 ASP.NET MVC2 项目中设置了默认路由,并希望为我的其他一些控制器添加/修改它。假设我有一个带有 Details 操作的 Customer 控制器,该控制器期望和“id”参数(int)。例如:
//
// GET: /Customer/Details/5
public ActionResult Details(int id)
{
//...
}
如果用户输入“非数字”,如何添加将返回 404 的路由? 我尝试添加以下“之前”默认路由,但它不起作用......
routes.MapRoute(
"DefaultDigitsId", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index" },
new { id = @"\d+" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
注意,如果可能的话,我希望保留默认路由... 我所有的控制器都使用“详细信息”和“编辑”,其中需要“id”(int)参数。 我想知道是否有一种方法可以在不必指定多个路由的情况下完成此操作(即通用的)...当然,目标是如果用户输入类似“/Customer/Details/apple”之类的内容,它不会抛出一个错误但将它们带到错误页面...
还有this post 提示设置默认值,但我不知道该怎么做...
【问题讨论】:
-
所以“Customer/Details/1”应该使用 DefaultDigitsId 路由,“Customer/Details/apple”应该给你一个 404,对吧?您希望哪些 URL 使用您的默认路由?
-
我猜是 /Customer/Index 或 /Customer/Create 之类的...不过我明白您的意思...您是否暗示我可以从默认路由中删除“id”,因为它不会有用吗?
-
我并没有真正想表达观点:只要理解你想要的行为。
标签: asp.net-mvc asp.net-mvc-2 constraints custom-routes