在ASP.NET MVC中,为什么这个url在使用/ id时不匹配路由但是?id = works?

时间:2012-10-09 13:57:47

标签: asp.net-mvc routing

首先,这是路线:

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 }
    );
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

经过多次挖掘,结果证明它只是一个网址。不知怎的,过去它已经获得了HTTP 301代码,将其重定向回主页...我猜浏览器会记住这一点。 ;)