【问题标题】:Routing: How to hide action name in url?路由:如何在 url 中隐藏动作名称?
【发布时间】:2012-01-23 08:12:55
【问题描述】:

在MVC默认路由中

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

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

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

我认为与上面的路线类似,如下所示:

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

会做的伎俩,但它给了我一个像 localhost:xxxx/item/Get/152... 我错过了什么?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 完成。抱歉,本来打算昨天做的,但是在 SO 规定的最短时间之前我就回家了;o)
    • @robasta 如果item 是我的控制器的名称,我只想隐藏特定操作,该怎么办
    • 如何从路由中隐藏控制器名称?有什么想法吗?
    • @robasta 为什么我在 id = 25 的地方输入 item/Get/25 会收到 Not Found 错误?无论如何让路由接受有和没有动作名称,Get?
    【解决方案2】:

    试试这个:

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

    【讨论】:

      【解决方案3】:

      对于像 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 2017-05-06
        • 2012-11-01
        相关资源
        最近更新 更多