0

所以我在我的项目中有以下路线,我想在这里做的是使用一个看起来相似的路线网址,但根据提供的参数将其引导到两个不同的操作,如果给定的参数是一个字符串,它应该选择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}$" });

任何人都可以帮我解决我在这里想念的东西吗?

4

2 回答 2

0

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

于 2013-07-29T15:52:15.047 回答
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 });

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

于 2013-07-29T18:20:25.593 回答