在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参数中。

+0

不是一个错误的答案,但可能更具体。隐藏控制器名称会产生后果。 – NerdFury 2011-05-18 15:36:31

+0

感谢您的回答,但它并不奏效。我试试:routes.MapRoute( \t“HomeActions”,“{action}”,new {controller =“Home”}); – Victoria 2011-05-18 15:36:54

+0

@维多利亚:你需要把它放在其他路线之前,否则将永远不会到达(因为其他路线首先匹配网址) – SLaks 2011-05-18 15:47:51

我会非常具体的关于你想要路由的网址。并将其放置在默认路线上方。

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现在将查找主控制器上的用户操作。

所以,我会建议具体说明这样的路线。

+0

谢谢,你是对的! – Victoria 2011-05-18 15:49:32

+0

也为我工作。 – Rolice 2012-05-10 11:11:47