まず、ルートは次のとおりです。
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 }
);
}