这是来自global.asax文件的两条路线。我正在尝试转到第二条路线,但遇到默认的404资源未找到错误。
当我删除第一条路线(在此示例中列出)时,它起作用了。
请问我该如何解决?
global.asax代码片段
// GET: /user/PureKrome/Alert/69
routes.MapRoute(
"User-Alert-Details",
"user/{displayName}/alert/{alertId}",
new { controller = "Account", action = "AlertDetails", alertId = 0 });
// GET: /user/PureKrome/Alert/create
routes.MapRoute(
"User-Alert-Create",
"user/{displayName}/alert/create",
new { controller = "Account", action = "AlertCreate" });
最佳答案
您的第一个路线是“贪婪”路线,并且很乐意在最后一个参数中接受“创建”作为AlertId。看来您只想将alertId参数设置为数字,所以您应该添加一个约束来告诉路由系统最后一个参数必须是数字。
看到这个tutorial。
例如:
// GET: /user/PureKrome/Alert/69
routes.MapRoute(
"User-Alert-Details",
"user/{displayName}/alert/{alertId}",
new { controller = "Account", action = "AlertDetails", alertId = 0 },
new { alertId = @"\d+" });
// GET: /user/PureKrome/Alert/create
routes.MapRoute(
"User-Alert-Create",
"user/{displayName}/alert/create",
new { controller = "Account", action = "AlertCreate" });
请注意,您也可以颠倒路线的顺序,但是即使您这样做,如果您希望alertId始终为数字,则仍应包括正确性约束。