好的,我在 VS 2013 中构建了一个 MVC Web 应用程序。我已经能够通过本地计算机上的 IIS 成功托管该应用程序,没有任何问题。但是我现在需要在远程计算机上托管。我遵循了与在本地计算机上相同的步骤,但我不断收到错误。
当我尝试浏览 Web 应用程序时,出现错误 HTTP 错误 403.14 - 禁止 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 一起安装的东西)
Or
2 - IIS 中的某些内容配置不正确。
欢迎任何建议,因为几个小时的研究没有找到答案,而且我已经用尽了 IIS 的知识
Edit
已经弄清楚并将其标记为下面的答案。
runAllManagedModulesForAllRequests
不应该用于此类事情。
See here http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html有关于此的一些详细信息。
最有可能的是,您的网站只缺少一个名为UrlRoutingModule
。在安装过程中,MVC nugets 将其安装到项目中。有一些错误,但已修复 https://github.com/maartenba/MvcSiteMapProvider/issues/289.
默认情况下,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/ http://example.com/myapplication/尽管没有设置任何“默认文档”并且 URL 中没有任何文件扩展名,但仍能正确路由。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)