首先,这是路线:
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 }
);
}
答案 0 :(得分:2)
如果它的asp.net mvc 3.0,它是一个已知的错误,有两个连续的可选参数
答案 1 :(得分:0)
经过多次挖掘,结果证明它只是一个网址。不知怎的,过去它已经获得了HTTP 301代码,将其重定向回主页...我猜浏览器会记住这一点。 ;)