【问题标题】:Add routing rules in MVC app在 MVC 应用中添加路由规则
【发布时间】:2012-08-13 17:41:02
【问题描述】:

我正在尝试编写一个规则来映射一个 URL,但是因为我没有得到我想要的结果。到目前为止我有这个规则:

routes.MapRoute(
            "Search", // Route name
            "{controller}/{action}/{product}/{page}", // URL with parameters
            new { controller = "Home", action = "Search", product = UrlParameter.Optional, page = UrlParameter.Optional } // Parameter defaults
        );

到目前为止,我可以使用它来实现这个结果:

 localhost:8493/home/search/myproduct
 localhost:8493/home/search/myproduct/2

但我想做这样的事情:

 localhost:8493/myproduct

所以这将路由到home/search/myproduct

我尝试了以下方法,但没有成功:

routes.MapRoute(
            "DirectSearch", // Route name
            "{product}/{page}", // URL with parameters
            new { controller = "Home", action = "Search", } // Parameter defaults
        );

有没有办法做到这一点?

添加:

所以在这里我添加了映射到另一个动作的特定路线,但它不起作用:

routes.MapRoute(
            "Tuna",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Tuna", id = UrlParameter.Optional }
        );

【问题讨论】:

    标签: c# asp.net-mvc-3 asp.net-mvc-routing url-routing


    【解决方案1】:

    我想你已经很接近了。这应该有效;

    routes.MapRoute(
                "Search", // Route name
                "{product}/{page}", // URL with parameters
                new { controller = "Home", action = "Search", product = UrlParameter.Optional, page = UrlParameter.Optional } // Parameter defaults
            );
    

    请记住,框架会从上到下读取路由数据,并使用它找到的第一个匹配的数据。因此,请确保在更一般的路线之前列出更具体的路线

    编辑

    Here's a link to a discussion on custom routing

    【讨论】:

    • 谢谢。我也有那条路线,但它处于最底层。我不知道它是从上到下读的,但现在我知道了:-)
    • 好的,我刚刚注意到一个问题。所以现在如果我尝试在相同/不同的控制器中执行另一个操作,它会将控制器名称作为product 的值。你对我如何解决这个问题有什么建议吗?谢谢
    • 这是超特定路线映射的危险之一。您需要编写特定路线以满足特定需求。
    • 所以我在帖子中添加了具体路线。我不得不将它向上移动以使其工作,但是如果尝试使用我的其他路线图来搜索产品,它不会找到该地图路线,因为它正在寻找/home/tuna。有没有办法为此添加约束?
    • 我编辑了我的答案,提供了一个相当全面的自定义路由链接,包括如何添加约束和如何调试路由。
    猜你喜欢
    • 2013-02-15
    • 2021-02-16
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2022-07-28
    相关资源
    最近更新 更多