2016-08-15 27 views
-4

由于某种原因,它认为目标是Apache服务器 - 我怀疑?@ Url.Action(“Action”,“Controller”)返回“/ cgi-bin?action =动作& controller =控制器”

MVC是V5.2.3,其依赖关系是正确的,按照nuget 。我已经搜索和搜索无济于事。

编辑 的代码只是@Url.Action("Action", "Controller")

所以我创建了一个全新的MVC项目和使用完全相同的正确的代码返回相同的代码。

http://localhost:53143/Controller/Action 

EDIT 2 我删除了我的web.config文件,问题是不存在的。

+0

你可以添加相关的代码产生错误的输出到问题? – Shyju

回答

0

我和一位专家取得了联系,他看了一下这个项目,并回答如下。

(BTW我有一个路线“的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 ...现在,该方法所做的是:

  1. 检索当前URL包括控制器,动作,区域...
  2. 添加或替换您指定的参数,
  3. 寻找最佳匹配路线! < ==
  4. 如果有任何路由变量 - 将提供的参数推送到这些变量中。
  5. 棒,其余的参数为查询字符串< ==

我特意强调了3点& 5,与第3点是最重要的。因此,UrlHelper.GetUrl(分别为Url.Action和Html.BeginForm)需要一个路由,并搜索可用路径以查找第一个匹配。

现在,这里有您的混合的WebForms,MVC应用程序问题来了 - 当你纯粹用MVC处理中不存在一个问题:您正在使用的MapPageRoute!请注意,它与MapRoute不同。和的MapPageRoute使用PageRouteHandler类来创建路由,而图路线使用MvcRouteHandler类,它使所有的差异,因为PageRouteHandler以这样一种方式,它总是一个好匹配UrlHelper.GetUrl创建路线(“ActionName”,“ControllerName”)将操作名称和控制器名称作为参数引入查询字符串中(第5点)。

那么,什么与您的设置情况是,Url.Action正在搜索路线,是打的的MapPageRoute和你的情况建立的第一个是这样的:

routes.MapPageRoute(“CGI- bin“,”cgi-bin/{* theRestcgi-bin}“,”〜/ home/Search。ASPX“);

这就是查询字符串的那个神秘的cgi-bin一部分来自,给人的印象是框架实际上是在寻找一些虚拟/物理文件夹

至于适当的解决方案:要么。定义一个合适的路由或者按照你所做的方式将url指定为一个简单的字符串,我认为,你的解决方案更好,因为你不必在RouteConfig类中移动路由定义

相关问题