ChatGPT解决这个技术问题 Extra ChatGPT

IIS 7 中的 ASP MVC 导致:HTTP 错误 403.14 - 禁止

我正在开发一个 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 并运行应用程序时,它都能正常工作!

ASP.NET MVC on IIS 7.5 的可能重复项

C
Community

也许它对某人有用:在使用 .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>

事实证明,当我卸载 NuGet 包时,它从我的 Web.config 中删除了 runAllManagedModulesForAllRequests="true"。感谢您在我整晚试图弄清楚这一点之前提到这一点。
这个!! Arrrrgh 我花了/浪费了一整天的时间试图让它工作,直到我找到你的答案,谢谢!奇怪的是它可以在我的本地机器上的 IIS 上正常运行,但不能在生产机器上运行,而且它们都在运行 IIS7.5
就是这样。 Cassette Nuget 卸载有时会删除它。谢谢。
尝试通过添加路由模块来避免使用此设置 - britishdeveloper.co.uk/2010/06/…
我喜欢答案评论“也许它对某人有用”......大声笑......看起来它对很多人有用,包括我自己。
C
Community

已回答 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 选项。


也为我工作。运行 aspnet_regiis -i 命令后 UrlMappingModule 安装在 IIS 中。
安装 IIS 后,我需要运行 aspnet_regiis 以使一切正常,即使 .NET 4 似乎已经注册。
如果框架是在 IIS 之前安装的,那么是的,您需要 aspnet_regiis。
不要忘记,对于 64 位系统,它是“Framework64”。即Windows\Microsoft.NET\Framework64\v4.xxx.xxx
对于这种用途,64 位或 32 位版本的 aspnet_regiis 无关紧要。此处列出了一些特殊情况:msdn.microsoft.com/en-us/library/k6h9cz8h.aspx#Anchor_1
B
Bogdan Litescu

我也遇到了这个错误。所有配置和权限都是正确的。但是我忘记将 Global.asax 复制到服务器,这就是 403 错误的原因。


在我的情况下,我不小心用鼠标移动了它而没有注意到。谢谢!
只是浪费了 2 个小时,因为在清除了我的网络文档文件夹之后,我忽略了复制这个文件!
G
Greg Gum

是因为太确定你(我)在做什么!

在我的机器上安装了 IIS 7,但没有安装所需的 ASP.NET 组件(控制面板->程序->打开/关闭->ASP.NET)。

所以安装这个解决了问题


是的,就我而言。我的 Windows 10 本地 IIS 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
这解决了我的问题。全新的 windows 10 还没有这些功能
是的,这在 Windows 10 中也为我修复了
D
Donny V.

我遇到过同样的问题。这篇 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。


N
NathanOliver

在我的情况下,以下方法帮助了我:

aspnet_regiis -i in Windows\Microsoft.Net\Framework 将模块添加到 system.webServer ...


我猜你省略了框架。但是以管理员身份打开 cmd,然后在 Windows\Microsoft.Net\Framework\v4.0.30319 中运行 aspnet_regiis -i
M
Murat Yıldız

尝试应用如下所示的以下设置:

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

希望这可以帮助...


提示:如果在此之后仍然出现权限错误,那么您可能需要在 cmd 中以管理员身份执行 iisreset 以使您的站点在 IIS 中运行。
D
David Christiansen

如果您运行的是 x64,还请检查您是否在应用程序池设置中启用了 32 位应用程序

https://i.stack.imgur.com/Hv0KX.png


J
JTTx

在取消选中“发布期间的预编译”- 我刚刚在 VS2015 中编写的 Web 服务上遇到 403.14 错误,所以我在 VS2013 中重写了它并且遇到了同样的错误。在这两种情况下,我都启用了“发布期间的预编译”。我取消选中它,但仍然收到错误。在我的情况下,我也有“在发布之前删除所有现有文件”,但在复制新发布的文件之前没有从服务器上的目标目录中删除所有内容。如果您不这样做 - 会留下一个“PrecompiledApp.config”文件,这会导致问题。删除该文件后,我的 Web 服务的 VS2013 和 VS2015 版本都非常出色。


J
Jeffrey LeCours

在我意识到我正在使用 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


A
Andrew Rebane

控制面板 > 打开或关闭 Windows 功能 > Web 服务器 > 应用程序开发

检查 ASP.NET


J
Joe.wang

请注意有时错误的 Managed pipeline mode 会导致此错误。有两个选项可以选择 integratedclassic


b
brimble2010

如何修复“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


o
oyenigun

检查您的 Global.asax 文件。就我而言,它是空的。


s
sotn

如果最重要的答案不起作用,请在托管目录中查找名为 PrecompiledApp.config 的配置,如果存在则将其删除。此文件阻止 IISExpress 和 LocalIIS 正常工作。 (我认为这是一个错误)在我的情况下文件的内容是:

<precompiledApp version="2" updatable="true"/>

而且我 100% 肯定这就是我的案例的问题,因为我在 2 小时内尝试了所有内容,并使用此配置进行了多次测试。

还有一件事:您不能在较新版本的 Windows 和 IIS 中使用 aspnet_regiis,因此请尝试

dism /online /enable-feature /featurename:IIS-ASPNET45 /all

c
codeMonkey

我在这里尝试了一切;没有任何效果。问题出在我的 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" />

A
Adel Mourad

世界上没有什么对我有用,

我发现了问题,这可能对某人有帮助,

适用于您使用 Plesk 的情况,我刚刚关闭了这个东西,一切都开始工作了。

但是,我不知道它的确切问题是什么。

https://i.stack.imgur.com/SQ16R.png


e
eulerfx

尽管出于以下原因提供了所有解决方案,但我也遇到了同样的错误:

缺少 DLL

数据库连接字符串指向不可访问的服务器。


e
eitanpo

在我的情况下,web.config 和除 /bin 文件夹之外的所有文件都丢失了(没有以某种方式复制)。傻,但这是我检查的最后一件事。


S
Seph

我最近遇到了这个错误,发现问题是由于我的 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


K
Kamil Gareev

使用 C# 4.5 的 ASP.NET 项目,我通过在 Web 平台安装程序中安装 ASP.NET 扩展解决了这样的问题


I
Iftikhar Ali Ansari

还有一件事是可能的

手动安装 .net framework 4.0

此解决方案适用于窗口 7 上的 IIS7

打开具有管理权限的 cmd

转到目录“C:\Windows\Microsoft.NET\Framework\v4.0.30319”

键入 aspnet_regiis.exe -i

通过输入运行命令“inetmgr”进入您的 inet 管理器

刷新你的 IIS7

重新加载网站。


M
Muhammad Musavi

我知道您在内部主机中遇到了这个问题,但我之前在外部主机中遇到过这样的问题,就我而言,它有自己的解决方案,也许它可以节省某人的时间:

事实上,我的网站因目前我不知道的某种原因而停止,如果您有同样的问题,请在 WebsitePanel 主页中转到 Web -> 网站,然后从列表中选择您网站的域名,然后在刚刚打开的页面右侧,检查是否看到STARTED字样,否则如果看到STOPPED字样,请重新启动。就这样。


M
MercifulGiraffe

我知道这是一个老话题,但是如果您有一个与控制器中的路由命名相同的文件夹,您也可能会收到此错误(在调试时)。

例如,如果您有一个用户控制器,带有一个名为 /User 的路由,并且您的解决方案中还有一个名为“用户”的文件夹,那么 IISExpress 将尝试浏览该文件夹而不是显示您的视图。


F
Felix Beifuß

在尝试了此处建议的所有解决方案后,我发现了另一种可能的解决方案:URLScan

IIS 禁用了 WebDAV,即使在我的应用程序的 web.config 中,WebDAV 的处理程序和模块也被删除。 PUT 仍然返回 403 - 禁止在 IIS 日志中没有任何日志条目。 (GET / POST 工作正常)。

原来 IIS 启用了一个活动的 ISAPI 过滤器(URLScan),它阻止了所有 PUT。删除 URLScan 后,它对我有用。


J
Jason Marsell

我的情况与其中任何一个都完全不同,并且 403:Forbidden 错误消息有点像红鲱鱼。

如果 Global.asax 模块中的 Application_Start() 函数尝试访问 web.config 并且它引用的条目不存在,则 IIS 阻塞并且(出于某种原因)抛出 403:Forbidden 错误消息。

仔细检查您是否缺少 web.config 文件中尝试在 Global.asax 模块中访问的条目。


w
wale A

如果您像我一样有一个使用 NHibernate 的应用程序,而上述答案并没有解决您的问题。

您应该查看应用程序中的连接字符串;可能在 webconfig 文件中以确保它是正确的。


d
dalemac

我一直在使用身份模拟:

<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”替换为您正在使用的版本。


u
user3589806

第 1 步:选择在 IIS 中产生 HTTP 错误的站点,然后单击目录浏览,如下图所示:

步骤 2:在 IIS 的目录浏览窗口中,单击右侧的操作中的启用,如下图所示:

现在为您的 asp.net 网站启用了目录浏览,只需在 IIS 中重新启动 Web 应用程序并在浏览器中浏览该站点并查看结果。


D
D. Kermott

我正在使用:Win Server 2012 R2 / IIS 8.5 / MVC4 / .Net 4.5

如果上述方法均无效,请尝试以下操作:

取消选中“发布期间预编译”

这踢了我几天。


@d-kermott,也许我的 [find][(stackoverflow.com/a/31319136/912481) 对你也有用吗?

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅