0

我想要一个带有可选参数的“用户”控制器的索引操作。

/Users/{id}

或者

/Users

我想避免:

/Users/Index/{id}

或者

/Users/Index/

我添加了一个 Route 以将 /Users/{id} 映射到 Index 操作。

routes.MapRoute( "Users",
                 "Users/{id}",
                 new { controller = "Users", action = "Index", id =
                 UrlParameter.Optional});

这很好用。当我向用户控制器添加另一个操作“添加”时,我遇到了一个问题,该操作也带有可选参数。我之前添加的路线误解了 Add 作为 Index 操作的参数。为 /Users/Add 触发“索引”操作。

我怎样才能得到最好的两者?

谢谢。

4

2 回答 2

2

约束属性设置为仅允许数字。那应该可以解决您的路由问题。

routes.MapRoute( "Users",
    "Users/{id}",
    new { controller = "Users", action = "Index", id = UrlParameter.Optional },
    new { id = "[0-9]+" }
);

编辑.

您可以在不使用正则表达式约束的情况下以不同的方式进行操作。显式添加路由用户/添加,将其添加到索引路由之前:

routes.MapRoute( "Users",
    "Users/Add/{id}",
    new { controller = "Users", action = "Add", id = UrlParameter.Optional }
);
于 2012-06-22T05:20:38.663 回答
0

您无需为控制器上的每个操作创建路由。在项目创建开始时 global.asax 中的默认路由足以满足您的需求:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Account", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
于 2012-06-22T05:20:21.590 回答