为什么这个MVC路由不起作用?

Pur*_*ome 10 asp.net-mvc routes

这是我的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" });
Run Code Online (Sandbox Code Playgroud)

Erv*_*ter 20

您的第一条路线是"贪婪"路线,并乐意接受"创建"作为最后一个参数中的alertId.看来您希望alertId参数仅为数字,因此您应该添加一个约束来告诉路由系统该最后一个参数必须是数字.

请参阅本教程.

例如:

// 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" });
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以反转路径的顺序,但即使您这样做,如果希望alertId始终为数字,仍应包含正确性约束.