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

标签 asp.net-mvc url model-view-controller routes

我在 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/

相关文章:

php - Laravel 单个 Controller 与多个 Controller 以及数据库行与列

java - 关闭另一个 Controller 中的选项卡 - JavaFX

c# - 自定义数据注释(数据类型)

asp.net - 发布到 MVC Controller ,ViewModel 保持为空

javascript - 我的 javascript 代码在同一窗口中打开包含输入值的 url 有什么问题吗?

java - 如何使用java中的正则表达式从移动浏览器中的YouTube url获取视频ID

asp.net - 从 View 更新模型

javascript - 如何对 Bundle 中的 javascript 文件进行版本控制?

java - 获取 JSP 标记中的上一个 URL

java - 获取 Controller 中的 View