我想为“用户”控制器设置索引操作,该控制器采用可选参数。
/Users/{id}
或者
/Users
我想避免:
/Users/Index/{id}
或者
/Users/Index/
我添加了一个路由来映射/ Users / {id}到Index操作。
routes.MapRoute( "Users",
"Users/{id}",
new { controller = "Users", action = "Index", id =
UrlParameter.Optional});
工作正常。当我向Users控制器添加另一个操作“Add”(也带有可选参数)时,我遇到了一个问题。我之前添加的路由误解了Add作为Index操作的参数。 “用户/添加”会触发“索引”操作。
我怎样才能充分利用两者?
感谢。
答案 0 :(得分:2)
将 constraints 属性设置为仅允许数字。这应该可以解决您的路由问题。
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 }
);
答案 1 :(得分:0)
您无需为控制器上的每个操作创建路径。创建项目开始时在global.asax中的默认路由足以满足您的需求:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Account", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);