gpt4 book ai didi

asp.net-mvc - ASP.NET MVC Url.Action 将当前路由值添加到生成的 url

转载 作者:行者123 更新时间:2023-12-03 05:57:12 27 4
gpt4 key购买 nike

我在 SO 中多次看到这个问题,但没有一个给出任何可接受的答案:

ASP.NET MVC @Url.Action includes current route data
ASP.NET MVC implicitly adds route values

基本上,我有一个带有名为 Group 的操作方法的 Controller ,它有一个重载,不接收参数并显示元素列表,另一个重载接收 id 并显示该组的详细信息。

如果我做这样的事情:

Url.Action("Group", "Groups");

从网站的主页 (/) 返回一个如下所示的 url:

"mysite.com/Groups/Group"

没关系现在,如果站点的当前地址是/Groups/Group/1我调用相同的方法

Url.Action("Group", "Groups");

返回的url是这样的:

"mysite.com/Groups/Group/1"

生成URL时自动添加当前页面的路由值。即使我以这种方式生成 URL:

Url.Action("Group", "Groups", null);

因此明确指定我不需要任何路由值,生成的 URL 是相同的。要获取我想要的地址,我必须显式地将路由值设置为空字符串,如下所示:

Url.Action("Group", "Groups", new {id=""});

这将生成以下网址:

"mysite.com/Groups/Group"

我的问题是,为什么会发生这种情况?如果我没有设置任何路由值,则不应将它们添加到生成的 URL 中。

最佳答案

如果您没有显式设置,Url.Action 将重用当前请求参数。这是由出站 url 匹配算法设计的。在生成url的过程中查找路由数据参数时,参数取自:

1)明确提供的值

2) 当前请求的值

3) 默认值

按照我上面指定的顺序。

路由的出站匹配算法很复杂,因此最好显式设置请求的所有参数,就像您在示例中所做的那样

关于asp.net-mvc - ASP.NET MVC Url.Action 将当前路由值添加到生成的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133223/

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