网址中没有控制器的MVC路由

时间:2011-05-18 15:23:21

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

如何配置ASP.NET MVC 3路由,以便它不会在URL中显示控制器?

这是我的路线

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

2 个答案:

答案 0 :(得分:20)

我会非常具体地说明您要路由的网址。并将其置于默认路线之上。

    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" } 
);

例如,如果在默认值之后添加了上述路由,那么网址http://www.example.com/AboutUs可能会匹配路由{controller =“AboutUs”,action =“Index”,id = UrlParamter.Optional}。如果您将路由添加到默认路由之上,那么查找您可能希望成为Users控制器上的Index操作的URL http://www.example.com/Users现在将在Home控制器上查找Users操作。

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

答案 1 :(得分:6)

您需要添加不带{controller}部分的路由,并在defaults参数中指定控制器名称。