0

首先,路线如下:

routes.MapRoute("PlaceRoutes", "{b}/Places/Show/{id}/{subaction}",
    new { b = "yokota-ab-japan", controller = "Places", action = "Show", id = UrlParameter.Optional, subaction = UrlParameter.Optional }
    );

这个网址:localhost/yokota-ab-japan/Places/Show/4b5bfc7ef964a520332029e3

不匹配

这个网址:localhost/yokota-ab-japan/Places/Show?id=4b5bfc7ef964a520332029e3

做。

事实上,当使用 /id 时,它只是简单地路由回根主页。当我在调试器中运行它时,它甚至从未触及 Places/Show 动作,它只是简单地返回。但是,如果我使用 ?id= 它路由很好。

我以前从未发生过这种情况……非常困惑。我尝试使用 Phil Haack 的路由调试器,但由于它甚至没有触及路由,只是循环回到主页,因此调试器无济于事。

编辑 - 这是完整的路线列表

public static void RegisterRoutes(RouteCollection routes) {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute("PlaceRoutes", "{b}/Places/Show/{id}/{subaction}",
        new { b = "yokota-ab-japan", controller = "Places", action = "Show", id = UrlParameter.Optional, subaction = UrlParameter.Optional }
        );

    routes.MapRoute("BaseRoutes", "{b}/{controller}/{action}/{id}",
        new { b = UrlParameter.Optional, controller = "Home", action = "Index", id = UrlParameter.Optional },
        new { controller = "Home|Member|Places|Search|Admin" }
        );

    routes.MapRoute(
        "NullBase",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new { controller = "Home|Member|Places|Search|Admin|Auth" }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}
4

2 回答 2

2

如果它的 asp.net mvc 3.0,它是一个已知的错误,带有两个连续的可选参数

http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx

于 2012-10-09T14:15:46.533 回答
0

经过大量挖掘,事实证明它只有一个网址。不知何故,它在过去获得了一个 HTTP 301 代码,将其重定向回主页......我猜浏览器会记住这一点。;)

于 2012-10-10T00:41:53.480 回答