使用一个类似的路由url用于两种不同的参数类型

时间:2013-07-29 15:05:53

标签: asp.net-mvc routes asp.net-mvc-routing

所以我在我的项目中有以下路由,我想在这里做的是使用一个类似的查找路径url,但如果给定参数是 string <,则根据提供的参数将其指向两个不同的动作/ em>它应该选择Search路由,如果参数是数字/整数,它应该选择GetCategory路由并实现这一点我写了下面的代码在SO上寻求一些现有的在线帮助之后,这似乎没有按预期工作。

无论参数值是多少,它总是选择列表中最先出现的路线。

//routes.MapRoute("GetCategory", "{pId}", new { controller = "Student", action = "Post", pId = @"^\d{1,3}$" });
routes.MapRoute("Search", "{category}", new { controller = "Student", action = "Search", category = UrlParameter.Optional });
routes.MapRoute("GetCategory", "{pId}", new { controller = "Student", action = "Post", pId = @"^\d{1,3}$" });

有人可以帮助我解决我在这里失踪的问题吗?

2 个答案:

答案 0 :(得分:0)

您是否尝试过将GetCategory路线移到另一路线上方。搜索路径的问题是你没有约束它所以它会匹配任何东西。如果您将GetCategory路径移动到顶部并提供了一个字符串,则它将不匹配,因为它不是数字并且将移动到下一个数字。

答案 1 :(得分:0)

刚试过这种方法

routes.MapRoute("GetCategory", "{pId}", new { controller = "Student", action = "Post" },new {pId = @"\d"});
routes.MapRoute("Search", "{category}", new { controller = "Student", action = "Search", category = UrlParameter.Optional });

您应该在约束参数内对params应用限制,而不是在默认值部分。