路由:如何在url中隐藏动作名称?

时间:2012-01-23 08:12:55

标签: asp.net-mvc

在MVC默认路由中

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

每当访问索引操作时,访问“索引”操作时,网址都不会显示操作名称。

我想在不同的控制器上获取该行为,该控制器正在检索单个项目的数据。我希望将默认操作命名为“get”,对于此操作,我希望url不显示操作名称,只显示控制器和项目ID。

我认为这与上面的路线相似,如下:

routes.MapRoute(
            "item_details",
            "item/{action}/{id}",
            new { controller = "item", action = "Get" }
            );

可以做到这一点,但它给了我一个像localhost这样的网址:xxxx / item / Get / 152 ......我错过了什么?

3 个答案:

答案 0 :(得分:13)

试试这个:

routes.MapRoute(
        "item_details",
        "item/{id}",
        new { controller = "item", action = "Get" }
        );

答案 1 :(得分:0)

试试这个:

routes.MapRoute(
            "Default", // Route name
            "{controller}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

答案 2 :(得分:0)

对于在 ASP.NET MVC 5.2天之内来到这里的用户,它在
添加id = UrlParameter.Optional后有效,至少在我的情况下如此

 routes.MapRoute(
          name: "item_details",
          url: "item/{id}",
          defaults: new { controller = "item", action = "Get", id = UrlParameter.Optional }
        );

如果RouteConfig类中还有更多路线,请将其移至其他路线的顶部

您也可以这样做:

routes.MapRoute(
               name: "item_details",
               url: "item",
               defaults: new { controller = "item", action = "Get", id = UrlParameter.Optional }
            );

参考:this SO answer