1

我正在尝试编写一个规则来映射一个 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 }
        );
4

1 回答 1

1

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

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

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

编辑

这是关于自定义路由的讨论的链接

于 2012-08-13T17:49:20.750 回答