出于某种原因,它认为目标是Apache服务器 - 我怀疑?
MVC是V5.2.3,其依赖性是nuget正确的 。我搜索并搜索无济于事。
修改
代码只是@Url.Action("Action", "Controller")
所以我创建了一个全新的MVC项目并使用完全相同的代码返回了正确的代码。
http://localhost:53143/Controller/Action
编辑2 我删除了我的web.config文件,因为问题不存在。
答案 0 :(得分:0)
我与专家联系,他看了看项目并回答如下。
(顺便说一下,我在路线中有' cgi-bin'因为有一些旧网址与我以前在Apache服务器上托管的域名有关,而我无法更改。)
答案 我在mvc助手的源代码中挖掘了一些内容,是的,这两个问题(我有一个类似的问题Html.BeginForm with overload causes form action to be '/cgi-bin?action=Index&controller=Home' and so the HomeController is bypassed)是相关的,因为Url.Action和Html.BeginForm归结为调用一个和同一个方法:UrlHelper.GetUrl ...现在,这个方法的作用是:
我刻意强调了第3点和第3点。 5,第3点是最重要的。因此,UrlHelper.GetUrl(以及分别为Url.Action和Html.BeginForm)需要一个路线,并搜索可用的路线以找到第一个匹配。
现在,这里出现了你的混合webforms-mvc应用程序的问题 - 当你纯粹与MVC打交道时,这个问题不存在:你正在使用MapPageRoute!请注意,它与MapRoute不同。 MapPageRoute使用PageRouteHandler类创建路径,而MapRoute使用MvcRouteHandler类,因为PageRouteHandler创建路径的方式总是与UrlHelper.GetUrl(" ActionName"," ControllerName"),将操作名称和控制器名称作为参数投入查询字符串(第5点)。
所以,你的设置会发生什么,Url.Action正在搜索一条路线并且正在击中MapPageRoute创建的第一条路线,在你的情况下,这是:
routes.MapPageRoute(" cgi-bin"," cgi-bin / {* theRestcgi-bin}","〜/ home / Search.aspx&#34 );
查询字符串的神秘cgi-bin部分来自哪里,给人的印象是框架实际上是在搜索某个虚拟/物理文件夹。
至于正确的解决方案:要么定义合适的路线,要么将url指定为一个简单的字符串。我认为,您的解决方案更好,因为您不必在RouteConfig类中移动路径定义。