【问题标题】:RedirectToAction As Get Request formatRedirectToAction As Get 请求格式
【发布时间】:2017-02-08 17:36:53
【问题描述】:

我有一个操作结果,我想重定向到一个具有动态 ID 的操作。

  return RedirectToAction("Engine", new {id = latestVersion.Id});

但是,返回的 URL 最终是:

domain.com/project/engine/xxx

但我需要的是:

domain.com/project/engine?id=xxx

这是我目前的地图路线:

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

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

有没有办法改变控制器级别的格式化方式?

【问题讨论】:

  • 不在控制器级别。控制器无法控制 url。您需要提供您拥有的所有 RouteMap(控制 url)。
  • 为什么?您使用 MVC 魔术来解析路由中的 id 参数,RedirectToAction 使用它们。
  • @devio,如果 id 中有额外的 /,我有很多 javascript 会哭泣
  • 删除你的第一条路线或你的行动方法上的参数名称。
  • 顺便说一句,您可以使用任一 URL 模式调用它

标签: c# asp.net-mvc asp.net-mvc-routing


【解决方案1】:

选项 1。

您可以将 id 路由参数更改为其他名称,例如,

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

并在控制器(使用它们的地方)中进行相应更改,或者

选项 2。

您可以添加一个不带id 参数的虚拟路由定义,例如,

routes.MapRoute(
                "RouteWithoutId", // Route name
                "{controller}/{action}" 
            );

并使用RedirectToRoute 之类的方法,

return RedirectToRoute("RouteWithoutId", new { action = "Engine", id = latestVersion.Id});

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    简单的答案

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

    【讨论】:

    • 是的,但现在你打破了/controller/action/id 使用该路由的所有其他操作方法的路由(非归属)。这意味着书签链接或静态链接(非 @Html.ActionLink() 生成的链接)不再有效。
    • 是的,我个人不会在应用程序中使用它,但如果有解决这两种情况的答案,我会接受!
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多