我正在开发一个 ASP MVC Web 项目。现在我有一个要求,迫使我在开发过程中部署到 IIS7(以检查某些功能)。每当我尝试输入网站的 URL 时,都会收到上述错误消息。 (注:开发机器:Vista Home Premium,IIS7)
到目前为止我所做的:
编辑了 HOSTS 文件(C:\WINDOWS\system32\drivers\etc\hosts)。
将两个域放入其中(127.0.0.1 domain1.com 和 127.0.0.1 domain2.com)。
创建了一个文件夹 c:\websites\dirOfApplication 并从 Visual Studio 8 中部署到此文件夹。
在 IIS7 中,使用主机名 domain1.com 和上面的应用程序文件夹创建了一个新站点。
在 Web 浏览器中键入地址 domain1.com 会导致上述错误(HTTP 错误 403.14 - 禁止 - Web 服务器配置为不列出此目录的内容。)
我想我错过了一些东西,但不知道是什么!尝试以相同的结果部署文件 System.Web.Mvc、System.Web.Abstraction 和 System.Web.Routing。每当我尝试按 F5 并运行应用程序时,它都能正常工作!
也许它对某人有用:在使用 .NET framework 4.5 将我的应用程序转换为 MVC 4 并使用 IIS 7.0 在我的服务器上安装框架后,我遇到了问题中提到的相同的“禁止”错误。当我注意到
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
我的 web.config 中丢失了。添加后,一切正常。很简单,但很容易被忽视...
编辑:
上面的方案当然可以,但确实是浪费资源。我认为最好添加评论中 Chris Herring 指出的路由模块。
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
</system.webServer>
已回答 SO here,问题:403 - Forbidden on basic MVC 3 deploy on iis7.5
运行 aspnet_regiis -i
。我经常发现您需要这样做才能使 4.0 应用程序正常工作。以 Administrator
的形式打开命令提示符(右键单击命令提示符图标并选择以管理员身份运行):
cd \
cd Windows\Microsoft.NET\Framework\v4.xxx.xxx
aspnet_regiis -i
安装并注册后,请确保您的应用程序正在使用设置为 .NET 4.0 的应用程序池。
更新:我刚刚发现这个命令有问题。使用 -i 将所有应用程序池更新为 ASP.NET 4.0。
使用 aspnet_regiis -ir
会安装 ASP.NET 版本,但不会将任何 Web 应用程序更改为此版本。您可能还想查看 -iru 选项。
我也遇到了这个错误。所有配置和权限都是正确的。但是我忘记将 Global.asax 复制到服务器,这就是 403 错误的原因。
是因为太确定你(我)在做什么!
在我的机器上安装了 IIS 7,但没有安装所需的 ASP.NET 组件(控制面板->程序->打开/关闭->ASP.NET)。
所以安装这个解决了问题
Turn Windows Features on of off > Internet Information Services > World Wide Web Services > Application Development Features > Tick ASP.NET 3.5 & ASP.NET 4.8
我遇到过同样的问题。这篇 Microsoft 支持文章为我修复了它。
https://support.microsoft.com/en-us/help/2023146/mvc-2-and-asp.net-4-web-forms-applications-that-use-url-routing-might-return-http-404-errors-when-they-attempt-to-process-extensionless-urls-on-iis-7-and-iis-7.5
在 Windows 控制面板“程序和功能”应用程序的“打开或关闭 Windows 功能”对话框中,执行以下步骤:
导航到以下节点: Internet 信息服务 --> 万维网服务 --> 通用 HTTP 功能 确保选中“HTTP 错误重定向”选项。
-或者-
导航到以下节点: Internet 信息服务 --> 万维网服务 --> 性能特性 确保选中“静态内容压缩”选项。选择任一选项后,单击“确定”以保存更改。
重新启用 HTTP 错误重定向模块或静态内容压缩模块可确保 ASP.NET 和 IIS 正确同步 HTTP 管道事件。这使 URL 路由模块能够处理无扩展的 URL。
在我的情况下,以下方法帮助了我:
aspnet_regiis -i in Windows\Microsoft.Net\Framework 将模块添加到 system.webServer
尝试应用如下所示的以下设置:
1) 向 IIS Server
上的 IIS_IUSRS
用户授予必要的权限(右键单击该网站,然后单击“编辑权限”>“安全性”)。
https://i.stack.imgur.com/9ZbK2.png
2) 如果您使用 .NET Framework 4
,请确保您的网站使用的 Application Pool
上的 .NET Framework 版本为 v4.0
。
https://i.stack.imgur.com/21tVk.png
3) 打开命令提示符为 administrator
并运行 iisreset
命令以重新启动 IIS Server
。
希望这可以帮助...
如果您运行的是 x64,还请检查您是否在应用程序池设置中启用了 32 位应用程序
https://i.stack.imgur.com/Hv0KX.png
在取消选中“发布期间的预编译”- 我刚刚在 VS2015 中编写的 Web 服务上遇到 403.14 错误,所以我在 VS2013 中重写了它并且遇到了同样的错误。在这两种情况下,我都启用了“发布期间的预编译”。我取消选中它,但仍然收到错误。在我的情况下,我也有“在发布之前删除所有现有文件”,但在复制新发布的文件之前没有从服务器上的目标目录中删除所有内容。如果您不这样做 - 会留下一个“PrecompiledApp.config”文件,这会导致问题。删除该文件后,我的 Web 服务的 VS2013 和 VS2015 版本都非常出色。
在我意识到我正在使用 IIS 10(在 Windows 10 版本 2004 上)之前,我通读了这里的每个答案,寻找有效的方法,而这个问题是关于 IIS 7 并且已有近十年的历史。
话虽如此,从提升的命令提示符运行它:
dism /online /enable-feature /all /featurename:IIS-ASPNET45
/all
将自动启用相关父功能:IIS-ISAPIFilter、IIS-ISAPIExtensions 和 IIS-NetFxExtensibility45。
在此之后,您会注意到提到 .NET v4.5 的两个新的(至少在我的环境中)应用程序池名称。以前使用 DefaultAppPool 的 ASP.NET Web 应用程序将正常工作。
https://i.stack.imgur.com/6XDAR.png
控制面板 > 打开或关闭 Windows 功能 > Web 服务器 > 应用程序开发
检查 ASP.NET
请注意有时错误的 Managed pipeline mode
会导致此错误。有两个选项可以选择 integrated
和 classic
。
如何修复“HTTP 错误 403.14 - 禁止 Web 服务器配置为不列出此目录的内容”
当您在 IIS 7+ 上运行 MVC 2+ 时会发生此错误,这是因为 ASP.NET 4 未在 IIS 中注册。就我而言,我正在创建一个 MVC 3 项目并将其托管在 IIS 7.5 上。
要修复它,请确保您已安装 MVC 2 或更高版本和 .Net Framework 4.0,然后以管理员身份运行命令提示符并键入以下行:
32 位 (x86)
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -ir
64 位 (x64)
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir
检查您的 Global.asax 文件。就我而言,它是空的。
如果最重要的答案不起作用,请在托管目录中查找名为 PrecompiledApp.config
的配置,如果存在则将其删除。此文件阻止 IISExpress 和 LocalIIS 正常工作。 (我认为这是一个错误)在我的情况下文件的内容是:
<precompiledApp version="2" updatable="true"/>
而且我 100% 肯定这就是我的案例的问题,因为我在 2 小时内尝试了所有内容,并使用此配置进行了多次测试。
还有一件事:您不能在较新版本的 Windows 和 IIS 中使用 aspnet_regiis
,因此请尝试
dism /online /enable-feature /featurename:IIS-ASPNET45 /all
我在这里尝试了一切;没有任何效果。问题出在我的 Web.config
文件中,不知何故,依赖程序集绑定从最小 1
更改为最小 0
。
<!-- was -->
<runtime>
<assemblyBinding>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
<!-- should have been -->
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
世界上没有什么对我有用,
我发现了问题,这可能对某人有帮助,
适用于您使用 Plesk 的情况,我刚刚关闭了这个东西,一切都开始工作了。
但是,我不知道它的确切问题是什么。
https://i.stack.imgur.com/SQ16R.png
尽管出于以下原因提供了所有解决方案,但我也遇到了同样的错误:
缺少 DLL
数据库连接字符串指向不可访问的服务器。
在我的情况下,web.config 和除 /bin 文件夹之外的所有文件都丢失了(没有以某种方式复制)。傻,但这是我检查的最后一件事。
我最近遇到了这个错误,发现问题是由于我的 Windows Server 上没有启用“HTTP 重定向”功能引起的。这篇博文帮助我完成了故障排除以找到答案(尽管是较旧的 Windows Server 版本):http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx 对于较新的服务器,请转到计算机管理,然后向下滚动到 Web 服务器角色并点击 add role services
使用 C# 4.5 的 ASP.NET 项目,我通过在 Web 平台安装程序中安装 ASP.NET 扩展解决了这样的问题
还有一件事是可能的
手动安装 .net framework 4.0
此解决方案适用于窗口 7 上的 IIS7
打开具有管理权限的 cmd
转到目录“C:\Windows\Microsoft.NET\Framework\v4.0.30319”
键入 aspnet_regiis.exe -i
通过输入运行命令“inetmgr”进入您的 inet 管理器
刷新你的 IIS7
重新加载网站。
我知道您在内部主机中遇到了这个问题,但我之前在外部主机中遇到过这样的问题,就我而言,它有自己的解决方案,也许它可以节省某人的时间:
事实上,我的网站因目前我不知道的某种原因而停止,如果您有同样的问题,请在 WebsitePanel 主页中转到 Web -> 网站,然后从列表中选择您网站的域名,然后在刚刚打开的页面右侧,检查是否看到STARTED字样,否则如果看到STOPPED字样,请重新启动。就这样。
我知道这是一个老话题,但是如果您有一个与控制器中的路由命名相同的文件夹,您也可能会收到此错误(在调试时)。
例如,如果您有一个用户控制器,带有一个名为 /User 的路由,并且您的解决方案中还有一个名为“用户”的文件夹,那么 IISExpress 将尝试浏览该文件夹而不是显示您的视图。
在尝试了此处建议的所有解决方案后,我发现了另一种可能的解决方案:URLScan
IIS 禁用了 WebDAV,即使在我的应用程序的 web.config 中,WebDAV 的处理程序和模块也被删除。 PUT 仍然返回 403 - 禁止在 IIS 日志中没有任何日志条目。 (GET / POST 工作正常)。
原来 IIS 启用了一个活动的 ISAPI 过滤器(URLScan),它阻止了所有 PUT。删除 URLScan 后,它对我有用。
我的情况与其中任何一个都完全不同,并且 403:Forbidden 错误消息有点像红鲱鱼。
如果 Global.asax 模块中的 Application_Start() 函数尝试访问 web.config 并且它引用的条目不存在,则 IIS 阻塞并且(出于某种原因)抛出 403:Forbidden 错误消息。
仔细检查您是否缺少 web.config 文件中尝试在 Global.asax 模块中访问的条目。
如果您像我一样有一个使用 NHibernate 的应用程序,而上述答案并没有解决您的问题。
您应该查看应用程序中的连接字符串;可能在 webconfig 文件中以确保它是正确的。
我一直在使用身份模拟:
<system.web>
<identity impersonate="true" userName="domain\username" password="password"/>
</system.Web>
推送到服务器时,您必须授予用户名访问 Temporary ASP.NET
Files 文件夹的权限,以便它可以正确读取/写入/执行:
C:\Windows\Microsoft.NET\"frameworkversion"\"aspversion"\Temporary ASP.NET Files
显然将“frameworkversion”和“aspversion”替换为您正在使用的版本。
第 1 步:选择在 IIS 中产生 HTTP 错误的站点,然后单击目录浏览,如下图所示:
步骤 2:在 IIS 的目录浏览窗口中,单击右侧的操作中的启用,如下图所示:
现在为您的 asp.net 网站启用了目录浏览,只需在 IIS 中重新启动 Web 应用程序并在浏览器中浏览该站点并查看结果。
我正在使用:Win Server 2012 R2 / IIS 8.5 / MVC4 / .Net 4.5
如果上述方法均无效,请尝试以下操作:
取消选中“发布期间预编译”
这踢了我几天。
runAllManagedModulesForAllRequests="true"
。感谢您在我整晚试图弄清楚这一点之前提到这一点。