MVC路由投掷404

时间:2017-09-22 08:01:20

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

我在MVC项目中设置了以下路线:

            routes.MapRoute(
                "Product",
                "product-{pathname}-{productId}",
                new { controller = "Product", action = "ProductPage" });

这适用于product-test-title-1234等网址,但如果网址的pathname位包含product-,则会抛出404 - 是否有办法允许使用{{{1}等网址1}}?

奇怪的是,如果我把第二个产品放在产品ID之前(例如product-test-product-title-1234),那么路线可以工作并且页面会显示在其他任何地方并且它会抛出404

更新

我认为问题可能在于网址的2个部分与路由匹配,所以我想我的问题是如何确保路由说第一个产品必须位于网址的开头(并计算任何网址)产品的其他实例作为路径名的一部分。)

经过进一步测试后,我发现这个网址不是去产品控制器,而是进入我的捕获路线:product-test-title-product-12345 - 不确定为什么会发生这种情况

1 个答案:

答案 0 :(得分:0)

  

有没有办法允许像product-test-product-title-1234这样的网址?

是的,但您定义的路线网址包含3个短划线,您匹配的网址包含4.您可以使用以下内容匹配该网址:

        routes.MapRoute(
            "Product",
            "product-{pathname}-product-{productId}",
            new { controller = "Product", action = "ProductPage" });

但这可能不是你想要的。这里的问题是,当您使用-作为路径占位符之间的分隔符时,占位符本身不能包含-或者路由类会混淆。

但是如果你下降到较低级别继承RouteBase,路由非常灵活,这可能更符合你的要求。然后,您可以将所需的任何自定义逻辑/ URL放入路径中,这样即使组织结构不是很好,也可以使用旧的URL方案。

请参阅:Multiple levels in MVC custom routing