Asp.net mvc 为两种不同的参数类型使用一个相似的路由url

Asp.net mvc 为两种不同的参数类型使用一个相似的路由url,asp.net-mvc,routes,asp.net-mvc-routing,Asp.net Mvc,Routes,Asp.net Mvc Routing,所以我在我的项目中有以下路径,我想在这里使用一个类似的路径url,但根据提供的参数将其指向两个不同的操作,如果给定的参数是字符串,它应该选择搜索路径,如果参数是数字/整数,它应该选择GetCategory路径,为了实现这一点,我在这里搜索了一些现有的在线帮助后编写了以下代码,但这似乎没有按预期工作 无论参数值是什么,它总是选择列表中最先出现的路线 //routes.MapRoute("GetCategory", "{pId}", new { controller = "Student", act

所以我在我的项目中有以下路径,我想在这里使用一个类似的路径url,但根据提供的参数将其指向两个不同的操作,如果给定的参数是字符串,它应该选择
搜索
路径,如果参数是数字/整数,它应该选择
GetCategory
路径,为了实现这一点,我在这里搜索了一些现有的在线帮助后编写了以下代码,但这似乎没有按预期工作

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

//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}$" });

有人能帮我解决我这里缺少什么吗?

您是否尝试过将GetCategory路线移到另一条路线的上方。搜索路径的问题是,它没有约束,因此它将匹配任何内容。如果您将GetCategory路由移动到顶部并提供了一个字符串,那么它将不匹配,因为它不是一个数字,并且将移动到下一个数字。

刚刚测试了这种方法

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

您应该在constraints参数中对参数应用限制,而不是在defaults部分。

已尝试但仍不起作用。。我觉得我提供的
约束有点问题
pId=@“^\d{1,3}$”}你能验证一下这是正确的吗?是的,我发现问题是没有一个单独的
新的
来指定参数,现在工作得很好。也谢谢你。