这是来自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始终为数字,则仍应包括正确性约束。

10-08 17:46