0

我在这个网站上看过一些关于错误 404 的讨论。但我找不到和我一样的。

我有一个使用 ASP.NET MVC 4 构建的应用程序。当我在 Visual Studio 2010 中运行时,url 路由完全没有问题。但是,当我将应用程序发布到 IIS7.5 的默认 Web 下名为“MyCompany”的 Windows 2008 R2 Enterprise 服务器时站点为名为“Test”的应用程序,路由url缺少应用程序名称“Test ”。从而导致错误 404。

该 url 应该是“http://MyCompany/ Test /Home/Index?fileType=Fin”。但是它显示“http://MyCompany/Home/Index?fileType=Fin”。

如果我将应用程序部署到不同的端口,例如 8080,它可以与“http://MyCompany: 8080/Test /Home/Index?fileType=Fin”一起正常工作。

如果有人可以提供帮助,请提前致谢。

我的路线功能是 -

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

我的 WebServer 配置是 -

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="1048576000" />
      </requestFiltering>
    </security>
  </system.webServer>

更新:

Robert 让我想起了 Javascript 的潜在问题。他是对的。再次查看我的代码后,我找到了问题的位置。这个功能 -

function OnChange(dropdown) {
    var myindex = dropdown.selectedIndex;
    top.location.href = "Home/Index?fileType=" + dropdown.options[myindex].value;
    return true;
}

应该 -

function OnChange(dropdown) {
    var myindex = dropdown.selectedIndex;
    top.location.href = "@Url.Content("~/")" +  "Home/Index?fileType=" + dropdown.options[myindex].value;
    return true;
}
4

1 回答 1

2

我要冒个险,说你可能已经在你的 javascript 中硬编码了一个 URL,而不是使用 URL 构建函数之一。有很多方法可以解决这个问题,但您需要先验证情况是否如此。我们需要查看索引视图(或有问题的 javascript 文件),以了解您是如何构建 URL 的,以便能够确定究竟是什么错误。

于 2013-06-13T21:21:00.437 回答