C# UrlHelper.GenerateContentUrl是如何工作的?

C# UrlHelper.GenerateContentUrl是如何工作的?,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我不明白,我有以下代码: return JavaScript(string.Format( "window.location = '{0}'", UrlHelper.GenerateContentUrl("Index", this.HttpContext))); 该代码包含两个非常通用的“Create”方法,可用于POST。这两种方法都在不同的控制器类中 现在是使用URL调用的方法Ahttp://localhost:56688/Businessrule/Create,执行代码时,我

我不明白,我有以下代码:

return JavaScript(string.Format(
   "window.location = '{0}'",
   UrlHelper.GenerateContentUrl("Index", this.HttpContext)));
该代码包含两个非常通用的“Create”方法,可用于POST。这两种方法都在不同的控制器类中

现在是使用URL
调用的方法Ahttp://localhost:56688/Businessrule/Create
,执行代码时,我会被重定向到
http://localhost:56688/Index

但是对于从
调用的方法Bhttp://localhost:56688/FormulaField/Create
我被重定向到
http://localhost:56688/FormulaField/Index


。。。我真的不明白,而且微软的文档也帮不上什么忙(现在,对于一个方法来说,这是一个相当糟糕的文档)

听起来好像你缺少了控制器名称。很明显,您被重定向到同一控制器中的索引操作

这是MVC路由引擎所做的,如果他没有找到控制器名称,他将分配一个默认值,在这种情况下,该操作已执行的控制器

尝试以下方法:

UrlHelper.GenerateContentUrl(@"~\ControllerName\Index", this.HttpContext)

因此,正如asawyer所指出的,代码本身回答了它的工作原理:

结果表明,如果传递的字符串以“~”开头,则该方法将调用PathHelpers.GenerateClientUrl,但如果该字符串不以“~”开头,则只会返回相同的字符串,而不会更改


但我仍然不明白为什么我会得到不同的结果。无论如何,看来我必须更仔细地查看传递给浏览器的原始响应…

这是开源的,请自己查看。我会看一看,但在我看来,听到“开源=缺乏/糟糕的文档”让我很难过。。。我对微软的期望更高一些……你问“它是如何工作的?”你的回答不能比源代码本身更好。当然,如果我在URL中添加控制器部分,它会工作的。但问题是:为什么它在同一场景中工作不同?(一个带有控制器部分的“索引”URL,另一个没有…)我认为您的解释并不准确,如果您按照asawyer的建议查看源代码,您将发现代码的确切功能。在我的回答中,我给出了一个提示(以及到源代码的链接)。。。不管怎样,如果你想“解决”这个问题,你的解决方案是有效的