gpt4 book ai didi

c# - UrlHelper.Action 包含不需要的附加参数

转载 作者:可可西里 更新时间:2023-11-01 08:35:04 30 4
gpt4 key购买 nike

我在 Controller ApplicationsController 中有一个方法,我需要在其中获取操作方法的基本 URL:

public ActionResult MyAction(string id)
{
var url = Url.Action("MyAction", "Applications");
...
}

问题是这包括当前路由数据中的 string id,当我需要没有 URL 时(该 URL 用于在基于 URL 的查找中从 CMS 获取内容)。

我尝试将 nullnew { } 作为 routeValues 参数传递,但没有成功。

匹配的路由如下(在所有其他路由之上):

routes.MapLowercaseRoute(
name: "Applications",
url: "applications/{action}/{id}",
defaults: new { controller = "Applications",
action = "Index", id = UrlParameter.Optional });

我看到其他几个问题也涉及到这个问题,但似乎都没有可行的解决方案。目前,我正在对 Controller 中的路径进行硬编码;但是,我希望能够将其抽象为 Action 过滤器,因此我需要能够生成 URL。

是否有一种干净/传统的方法来防止这种行为?

最佳答案

好的,我明白了。这就是所谓的“段变量重用”。当为出站 URL 生成路由,并尝试为路由的 URL 模式中的每个段变量查找值时,路由系统将查看当前请求的值。这种行为使许多程序员感到困惑,并可能导致冗长的调试 session 。路由系统热衷于对路由进行匹配,以至于它将重用传入 URL 中的段变量值。所以我认为您必须像 Julien 建议的那样覆盖该值:

var url = Url.Action("MyAction", "Applications", new { id = "" })

关于c# - UrlHelper.Action 包含不需要的附加参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20349681/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com