0

まず、ルートは次のとおりです。

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

この URL: localhost/yokota-ab-japan/Places/Show/4b5bfc7ef964a520332029e3

一致しません。

この URL: 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の場合、2つの連続したオプションのパラメーターに関する既知のバグです

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

于 2012-10-09T14:15:46.533 に答える
0

掘り下げた結果、それはその 1 つの URL だけであることがわかりました。どういうわけか、過去に HTTP 301 コードを取得し、それをホームページにリダイレクトしていました...ブラウザはそれを覚えていると思います。;)

于 2012-10-10T00:41:53.480 に答える