【问题标题】:Using one similar route url for two different parameter types对两种不同的参数类型使用一个相似的路由 url
【发布时间】:2013-07-29 15:05:53
【问题描述】:

所以我在我的项目中设置了以下路由,我想在这里使用一个外观相似的路由 url,但如果给定参数是 string 它应该选择 Search 路由,如果参数是 digit/integer,那么它应该选择 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}$" });

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

【问题讨论】:

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


    【解决方案1】:

    刚刚测试了这种方法

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

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

    【讨论】:

    • 是的,发现问题是没有单独的new 用于指定参数,现在运行良好。也谢谢你。
    【解决方案2】:

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

    【讨论】:

    • 试过还是不行。。我感觉constraint ive 提供的pId = @"^\d{1,3}$" }) 有问题,你能验证一下这是否正确?
    猜你喜欢
    • 1970-01-01
    • 2019-01-10
    • 2015-08-18
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    相关资源
    最近更新 更多