虽然有点晚了,但我认为迟到总比不做好。我遇到了完全相同的问题,我通过将 MapPageRoute 代码和 MapRoute 代码分组,然后始终首先调用 MapRoute 代码来解决它。例子:
最初我的路由看起来像这样 -
routes.MapPageRoute("401", "401/", "~/Views/Error/401.aspx");
routes.MapPageRoute("404", "404/", "~/Views/Error/404.aspx");
routes.MapPageRoute("500", "500/", "~/Views/Error/500.aspx");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
etc etc
这导致我的所有表单操作都定向到格式如下的 url:
/mysite/401?action=x&controller=y
显然这没有用。通过确保我始终首先设置所有 MVC 路由,问题自行解决。我最终制作了两种单独的方法,一种用于配置 MVC 路由,另一种用于配置 Webform 路由,如下所示:
RouteConfig.RegisterMvcRoutes(RouteTable.Routes); // contains only MapRoute
RouteConfig.RegisterWFRoutes(RouteTable.Routes); // contains only MapPageRoute
(这些调用照常进入 Global.asax 文件并替换 RouteConfig.RegisterRoutes)