【问题标题】:In ASP.NET MVC, why doesn't this url match a route when using /id but ?id= works?在 ASP.NET MVC 中,为什么在使用 /id 但 ?id= 有效时此 url 不匹配路由?
【发布时间】:2012-10-10 08:41:53
【问题描述】:

首先,路线如下:

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

【问题讨论】:

  • 您还定义了其他路线吗?
  • 是的,但那条路线是第一位的。我用完整的路线列表更新了问题。
  • 您可以发布您的控制器操作吗?在具有此操作的 MVC 3 中: Show(string subaction, string id, string b) 路由对我来说很好

标签: asp.net-mvc routing


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-02-16
      • 1970-01-01
      • 2018-02-26
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 2011-07-16
      相关资源
      最近更新 更多