如何重写网址:/ SomePage to / Pages / ShowPage / SomePage?
我试过了:
routes.MapRoute("myroute", "{id}", new { controller = "Pages", action = "ShowPage" });
但它不起作用。我做错了什么?
答案 0 :(得分:1)
如果您尝试说“导航到/SomePage
会拨打PagesController.ShowPage("SomePage")
”,那么您可能想要这样:
// Find a method with signature PagesController.ShowPage( string param )
// and call it as PagesController.ShowPage("SomePage")
route.MapRoute(
"MyRoute",
"SomePage",
new { controller = "Pages", action = "ShowPage", param = "SomePage" } );
这将仅重定向确切的网址/SomePage
。如果您尝试说“导航到/{something}
将运行PagesController.ShowPage( something )
方法”,那么这是一个更难的问题。
如果第二种情况确实是您想要的,那么您必须在大多数其他路线之后定义它。您想要的路由条目是:
// This will call the method PagesController.ShowPage( string param )
route.MapRoute(
"MyRoute",
"{param}",
new { controller = "Pages", action = "ShowPage" } );
答案 1 :(得分:0)
我认为这应该是:
routes.MapRoute("myroute", "{controller}/{action}/{id}", new { controller = "Pages", action = "ShowPage", id = "SomePage" });
答案 2 :(得分:0)
这是错误的,因为我认为在你的应用程序中,有这个默认的地图路线:
routes.MapRoute(
"root", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
它将查找名称等于您传入的ID的控制器,如果删除此默认地图路线,您的地图路线将起作用。
你应该试试这个路由调试工具,它有很多帮助:
答案 3 :(得分:0)
您需要确保您的路线映射到您的对象。在您的情况下,您需要一个名为PagesController的控制器,其中包含一个名为ShowPage的方法,其中包含一个名为pagename的参数(如果您使用如下所示的路由)。
routes.MapRoute("route", "{controller}/{action}/{pagename}", new { controller = "Pages", action = "ShowPage", pagename = "" } );
此外,请不要忘记在指定路由时可以使用正则表达式 - 这可以帮助您确保路由引擎使用正确的路由。
routes.Add(new Route("{controller}/{action}/{params}",
new RouteValueDictionary { { "controller", "user" }, { "action", "login" }, { "params", "" } },
new RouteValueDictionary { { "controller", @"^(?!Resources)\w*$" }, { "action", "[a-zA-Z]+" } },
new MvcRouteHandler()));
答案 4 :(得分:0)
您可以编写自己的静态路由。在默认路线上方添加您自己的路线。
routes.MapRoute("MyRoute", // Route name
"Pages/ShowPage/SomePage/{id}", // URL with parameters
new { controller = "Pages", action = "ShowPage", id = "" } // Parameter defaults
);
现在,如果SomePage是一个变量,你会想要这样的东西:
routes.MapRoute("MyRoute", // Route name
"Pages/ShowPage/{somePage}/{id}", // URL with parameters
new { controller = "Pages", action = "ShowPage", id = "", somePage = "" } // Parameter defaults
);
如果需要,可以省略{id},只需将其从动作参数中删除。
routes.MapRoute("MyRoute", // Route name
"Pages/ShowPage/{somePage}", // URL with parameters
new { controller = "Pages", action = "ShowPage", somePage = "" } // Parameter defaults
);