部署 ASP.NET MVC 4 应用程序

Deploy ASP.NET MVC 4 Application

在 Visual Studio 中,我的项目可以毫无问题地构建和运行。部署到 Windows Server 2012 R2 时遇到以下错误:

A default document is not configured for the requested URL, and directory browsing is not enabled on the server.

我已经安装了所有 4.5 和其他 Roles and Profiles,已将文件夹的权限授予 每个人 并且已阅读每篇文章并尝试实施每条建议但无济于事..

我别无选择,为此花了数周时间,无法理解部署站点为何如此复杂。有人可以提供建议吗?谢谢

Edit - 这是针对 Windows Server 2012 的,我尝试了建议的替代方案,例如将 runAllManagedModulesForAllRequests 添加到我的 web.config。

编辑 部署时,我在发布模式下构建解决方案,并将 bin、视图、内容和脚本文件夹复制到 Windows 服务器。然后在 IIS 中将该文件夹设为应用程序,确保分配了 4.0 应用程序池并仍然收到错误。

最终编辑 发布让我可以看到需要复制的结构。还有 3 个 dll 需要从 Visual Studio:

复制到本地

以及 Web.Config dependentAssembly 更新以考虑一些 MVC4 dll,例如指向 MVC3 二进制文件的 Unity.Mvc4。

此错误消息提供了有关问题的线索。 MVC 站点不像 WebForms 那样依赖文档或网页,这是 IIS 的默认模式。它们依赖于处理用于将请求传递给您的应用程序的 RESTful url 的特殊处理程序。

在您的 web.config 文件中,检查以下配置是否存在于 system.webServer 部分:

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>   
</system.webServer>

然后在您的 Web 服务器上,打开 IIS 管理器,在 LHS 的“连接”面板中导航到代表您的应用程序的节点,然后双击“功能视图”选项卡中的“处理程序映射”图标。检查 ExtensionlessUrlHandler-Integrated-4.0 处理程序是否已启用(见下文)。

如果这不起作用,请仔细检查您是否在服务器上启用了 ASP.NET 4.5 角色。有关说明,请参阅 http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-using-aspnet-35-and-aspnet-45#TOC301258515

还要确保您的应用程序 运行 在为 .NET 4.0 配置的 AppPool 下。

我建议您通过 右键单击 解决方案中的项目,使用 Visual Studio 中的 Publish 工具explorer 在网络上部署结果文件。然后尝试以下操作:

  1. 使用 Web PI 重新安装 .Net 框架和 MVC。
  2. 在根文件夹中放置一个虚拟 default.aspx 文件(这不会 当 MVC 工作时使用,但可以摆脱这个问题。
  3. 尝试 运行 Visual Studio 64 中的 aspnet_regiis -i 命令 位命令提示符(具有管理员权限),然后部署它。
  4. 看看Default Document configuration in IIS

希望得到解决

IIS 似乎没有将您的应用程序视为 Web 应用程序。一定是MVC版本不匹配。

因为它被标记为 MVC4,所以我们在 MVC4 中有 3 个内部版本。检查未安装 MVC 版本 installed.If 的服务器,或者如果您不想在服务器中安装 MVC,请为您在项目中引用的所有程序集设置 CopyLocal=true 并重新发布在服务器中应用和部署。