【问题标题】:IIS configuration - ASP.NET MVC returns default document on all requestsIIS 配置 - ASP.NET MVC 返回所有请求的默认文档
【发布时间】:2014-02-14 10:58:58
【问题描述】:

好的,所以我在 VS 2013 中构建了一个 MVC Web 应用程序。我已经能够通过本地计算机上的 IIS 成功托管这个应用程序,没有任何问题。但是我现在需要托管在远程机器上。我已按照与本地计算机上相同的步骤进行操作,但不断出现错误。

当我尝试浏览 Web 应用程序时,我收到一个错误 HTTP 错误 403.14 - Forbidden Web 服务器配置为不列出此目录的内容。但是,我创建了一个默认文档,因为此错误的详细信息告诉我,现在每次我尝试访问应用程序(localhost/MyWebApp)时,它都会转到该 default.html。

但是,当我指定要转到特定控制器(例如 localhost/MyWebApp/Home)时,我收到 404 错误(HTTP 错误 404.0 - 未找到 您要查找的资源已被删除、名称已更改或暂时不可用。)

我目前尝试托管的机器由于各种原因没有安装 Visual Studio,但我已经在其上安装了 ASP.NET MVC 3 和 .NET 4.5 Framework。远程机器 IIS 上的默认网站也已经成功运行了一个 classic.net 应用程序。

我的想法是:

1 - 我缺少一些托管 asp.net mvc 应用程序所需的先决条件(可能是与 Visual Studio 一起安装的)

或者

2 - IIS 中的某些内容配置不正确。

欢迎任何建议,因为几个小时的观察没有找到答案,而且我已经用尽了我对 IIS 的了解

编辑

已经想通了,并在下面标记为答案。

【问题讨论】:

  • 你能显示你的 web.config 吗?
  • 我已将其添加到问题中。
  • 嗯 - 和 Global.asax?包括Route-Config。
  • 再次默认。如果您认为它可能会导致问题,我会发布它,但如果它确实存在问题,那么当本地托管在 IIS 上时,应用程序将无法运行,不是吗?
  • 这听起来可能很愚蠢,但我曾经有过类似的事情...... .NET 4.5 是否正确安装和注册? (确保从 Framework64 调用 aspnet_regiis.exe)

标签: asp.net asp.net-mvc asp.net-mvc-4 iis


【解决方案1】:

runAllManagedModulesForAllRequests 不应该用于此类事情。
See here 了解更多详情。

很可能,您的网站只缺少一个名为 UrlRoutingModule 的模块。在安装过程中,MVC nugets 将其安装到项目中。 There were some bugs about that, but has been fixed.

默认情况下,ASP 通过扩展名选择内容处理程序,例如 URL 中的 ASPX 或 JPG。由于在 MVC 中通常没有这样的东西,因此 MVC 需要这个模块来正确执行路由。

问题是,路由似乎不适用于您的情况。

首先,确保该模块存在。打开 IIS 管理控制台,转到您的页面,打开模块部分并检查 UrlRoutingModule 是否在模块中列出。如果没有,请尝试重新安装 MVC 套件。或者像上面文章中介绍的那样手动将其添加到 webconfig。

如果该模块存在,请检查网站的结构。

在 IIS 上,“站点”和“应用程序”之间存在细微差别。您可以将项目部署为整个站点,也可以部署为包含在某个站点中的应用程序。

您有可能将项目部署为应用程序,并且该模块在该应用程序的范围内“打开”,而不是在整个站点上。如果是这种情况,您可以在实际站点的根目录中添加简单的额外 webconfig:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <system.webServer>
    <modules>
      <remove name="UrlRoutingModule-4.0" />
      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
    </modules>
  </system.webServer>
</configuration>

这将在整个站点上启用 MVC 路由,并允许 http://example.com/myapplication/ 正确路由,尽管没有设置任何“默认文档”并且 URL 中没有任何文件扩展名。

【讨论】:

    【解决方案2】:

    我终于通过阅读 How to host MVC application in IIS 7.0? 中的 Elian Ebbings anwser 得到它

    原来我需要做的就是更改 Web 配置,以便模块部分的 runAllManagedModulesForAllRequests 设置为 true。例如

    所以我的网络配置改变了

    发件人:

    <system.webServer>
        <modules>
          <remove name="FormsAuthenticationModule" />
        </modules>
    </system.webServer>
    

    收件人:

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
          <remove name="FormsAuthenticationModule" />
        </modules>
    </system.webServer>
    

    【讨论】:

      【解决方案3】:

      您不能在 MVC 应用程序中使用“localhost/MyWebApp/Views/Home/Index.cshtml”之类的链接。尝试“localhost/Home/”。并检查是否有任何站点在第 80 个端口上启动。如果 MyWebApp 是仅在第 80 端口工作的应用程序,请检查此端口是否已添加为远程计算机防火墙中的安全规则。

      【讨论】:

      • 我已经在尝试访问 Localhost/MyWebApp/Home 但它返回错误 HTTP 错误 403.14 - 禁止 Web 服务器配置为不列出此目录的内容。但是,如上所述,我已经创建了一个 default.html,现在每当我尝试访问任何内容时,它都会转到这个默认的 html
      • 你读过这篇文章吗?当您访问托管在 IIS 7.0 上的网站时出现错误消息:“HTTP Error 403.14 - Forbidden”support.microsoft.com/kb/942062
      • 如果您不这样做,请尝试重复本文中的步骤。如果你使用第 80 个端口,我认为你应该使用“localhost/Home/”而不是“Localhost/MyWebApp/Home”
      • 是的,我已经读过了,因此我创建了 default.html 页面。问题是它给出了这个错误,因为它没有导航到我的任何 Web 应用程序内容,所以它会寻找默认文档。不,我相信我说它应该是 Localhost/MyWebApp/Home 是正确的,因为在 IIS 的默认网站下有另一个 Web 应用程序,因此您需要指定您想要“MyWebApp”的主页而不是任何其他应用程序。
      • 你能一步一步写你在做什么吗?您能告诉我您是尝试从本地计算机连接到远程主机还是尝试从远程主机浏览器访问?
      【解决方案4】:

      ASP MVC 4(同时运行 IIS 和编辑代码):

      在 IIS 运行时编辑 .cs 文件有时会导致问题,但可以运行 IIS 并编辑代码。

      只需右键单击cshtml 文件,然后单击“在浏览器中查看”。它将运行 IIS,然后您可以编辑任何 .cs 文件并同时查看任何“视图”的输出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-26
        • 2012-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多