在url中没有控制器的MVC路由
问题描述:
如何配置ASP.NET MVC 3路由,以便它不会显示url中的控制器?在url中没有控制器的MVC路由
这里是我的路线
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"HomeActions",
"{action}",
new { action= "AboutUs" }
);
我需要网址:
mysite.com/AboutUs
但我有
mysite.com/Home/AboutUs
答
您需要添加路由没有{controller}
部分,并指定控制器名称在defaults参数中。
答
我会非常具体的关于你想要路由的网址。并将其放置在默认路线上方。
routes.MapRoute(
"HomeActions",
"AboutUs",
new { controller = "Home", action= "AboutUs" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
对于您所建议的路线不太具体,可能会产生不必要的后果。特别是如果在默认路由下面列出。
routes.MapRoute(
"HomeActions",
"{action}",
new { controller = "Home", action= "AboutUs" }
);
例如,如果上述线路是默认之后加入,则URL http://www.example.com/AboutUs将可能匹配的路由{控制器=“关于我们”,动作=“索引”,ID = UrlParamter.Optional}。如果您将路由添加到默认路由之上,那么查找您可能希望成为用户控制器上的索引操作的url http://www.example.com/Users现在将查找主控制器上的用户操作。
所以,我会建议具体说明这样的路线。
不是一个错误的答案,但可能更具体。隐藏控制器名称会产生后果。 – NerdFury 2011-05-18 15:36:31
感谢您的回答,但它并不奏效。我试试:routes.MapRoute( \t“HomeActions”,“{action}”,new {controller =“Home”}); – Victoria 2011-05-18 15:36:54
@维多利亚:你需要把它放在其他路线之前,否则将永远不会到达(因为其他路线首先匹配网址) – SLaks 2011-05-18 15:47:51