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


146

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


Answers:


224

也许对某人有用:在将我的应用程序通过.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>

2
事实证明,当我卸载NuGet程序包时,它runAllManagedModulesForAllRequests="true"从Web.config中删除了该程序包。感谢您在我整夜试图解决这个问题之前提到此问题。
Schmalls,2012年

3
这个!!Arrrrgh我花了整整一天的时间试图使它起作用,直到我找到您的答案,谢谢!奇怪的是,它可以在我的本地计算机上的IIS上正常运行,但不能在生产环境中运行,并且它们都在运行IIS7.5
Glenn Slaven

1
就是这样 卸载Cassette Nuget有时会删除它。谢谢。
Zachary Scott

8
尝试通过将路由模块,以避免使用此设置- britishdeveloper.co.uk/2010/06/...
克里斯·赫林

6
我喜欢答案评论“也许对某人有用”……大声笑……看起来对很多人(包括我自己)很有用。
Paul

126

此处回答SO ,问题:403-禁止在iis7.5上部署基本MVC 3

运行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命令后,在IIS中安装了UrlMappingModule。
Manish Gupta

安装IIS之后,即使.NET 4似乎已经注册,我也需要运行aspnet_regiis才能使所有工作正常。
布赖恩

如果该框架是在IIS之前安装的,那么您将需要aspnet_regiis。
Brettski

2
不要忘记,对于64位系统,它是“ Framework64”。即Windows \ Microsoft.NET \ Framework64 \ v4.xxx.xxx
grahamesd

对于此用途,aspnet_regiis的64位或32位版本无关紧要。这里列出了一些特殊情况:msdn.microsoft.com/zh-cn/library/k6h9cz8h.aspx#Anchor_1
Brettski 2015年

34

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


就我而言,我是不小心用鼠标移动了它。谢谢!
Mathias Lykkegaard Lorenzen 2013年

只是浪费了2个小时,因为在清除了我的网络文档文件夹后,我忽略了将此文件复制过来!
史蒂文·斯普罗亚特

10

这是因为过于确定您(我)在做什么!

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

所以安装这个解决了问题


9

我遇到过同样的问题。此Microsoft支持文章为我修复了该问题。
https://support.microsoft.com/zh-CN/help/2023146/mvc-2-and-asp.net-4-web-forms-applications-that-use-url-routing-might-return-http-当他们尝试在IIS 7和IIS 7上处理无扩展URL时出现404错误

在Windows控制面板“程序和功能”应用程序的“打开或关闭Windows功能”对话框中,执行以下步骤:

  1. 导航到以下节点:Internet信息服务->万维网服务->通用HTTP功能
  2. 确保已选择“ HTTP错误重定向”选项。

-要么-

  1. 导航到以下节点:Internet信息服务->万维网服务->性能功能
  2. 确保已选择“静态内容压缩”选项。选择任一选项后,单击“确定”以保存更改。

重新启用HTTP错误重定向模块或静态内容压缩模块可确保ASP.NET和IIS正确同步HTTP管道事件。这使URL路由模块可以处理无扩展名的URL。


7

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

1)IIS_IUSRS用户授予必要的权限IIS Server(右键单击网站,然后单击“编辑权限”>“安全性”)。

在此处输入图片说明

2)如果你使用.NET Framework 4,确保.NET Framework版本是v4.0Application Pool你的网站使用。

在此处输入图片说明

3)打开Commanp Prompt as administrator并运行iisreset命令以重新启动IIS Server

希望这可以帮助...


提示:如果此后仍然出现权限错误,则可能需要在cmd中以Admin身份进行iisreset,以使站点在IIS中运行。
科里·科赫

6

就我而言,以下方法可以帮助我:

  1. aspnet_regiis -iWindows\Microsoft.Net\Framework

  2. 将模块添加到system.webServer

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        ...
    </system.webServer>

我猜你省略了框架。但是以管理员身份打开cmd,然后在Windows \ Microsoft.Net \ Framework \ v4.0.30319
DeadlyChambers 2015年


3

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


2

我在这里尝试了一切;没有任何效果。问题出在我的Web.config文件中,以某种方式依赖于程序集的绑定从minimum 1变为minimum 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" />

1

请注意,有时错误Managed pipeline mode会导致此错误。有两种选择,选择integratedclassic


1

如何解决“ 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



1

如果最不能解决问题,请PrecompiledApp.config在主机目录中查找名为config的配置,如果存在则将其删除。此文件使IISExpress和LocalIIS无法正常工作。(我认为这是一个错误)就我而言,文件的内容为:

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

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

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

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


0

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

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

0

在我的情况下,缺少web.config和/ bin文件夹以外的所有文件(不以某种方式复制)。
愚蠢的,但这是我检查的最后一件事。




0

还有一件事可能

手动安装.net Framework 4.0

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

打开具有管理权限的cmd

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

键入aspnet_regiis.exe -i

通过输入运行命令“ inetmgr”到达您的inet经理

刷新您的IIS7

重新加载网站。


0

我知道您在内部主机中遇到了这个问题,但是在外部主机中我曾遇到过这样的问题,对于我来说,它有自己的解决方案,也许可以节省一些时间:

实际上,我的网站由于某种原因(目前我不知道已停止),要检查您是否遇到同样的问题,请在WebsitePanel主页中转到Web-> Websites,然后从列表中选择您的网站的域名,在刚刚打开的页面右侧,请检查是否看到单词STARTED,否则看到单词STOPPED,请重新开始。就这样。


0

我知道这是一个古老的话题,但是如果您有一个与控制器中的路由名称相同的文件夹,那么在调试时也会出现此错误。

例如,如果您有一个UserController,其路由名为/ User,并且在解决方案中还具有一个名为“ User”的文件夹,则IISExpress将尝试浏览该文件夹,而不显示视图。


0

在尝试了这里建议的每个解决方案之后,我发现了另一个可能的解决方案:URLScan

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

事实证明,IIS已启用了活动的ISAPI筛选器(URLScan),从而阻止了所有PUT。删除URLScan后,它对我有用。


0

我的情况与以上任何一种完全不同,并且403:Forbidden错误消息有点像是鲱鱼。

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

仔细检查您是否没有丢失试图在Global.asax模块中访问的web.config文件中的条目。


0

如果您像我一样,并且拥有使用NHibernate的应用程序,并且上述答案还不能解决您的问题。

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


-1

我一直在使用Identity Impersonate:

<system.web>
    <identity impersonate="true" userName="domain\username" password="password"/>
</system.Web>

当推送到服务器时,您必须授予用户名访问Temporary ASP.NETFiles文件夹的权限,以便它可以正确读取/写入/执行:

C:\Windows\Microsoft.NET\"frameworkversion"\"aspversion"\Temporary ASP.NET Files

显然,将“ frameworkversion”和“ aspversion”替换为您使用的版本。


-1

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

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

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



-1

我遇到了此问题,但是可以通过转到Internet信息服务(IIS)管理器,双击“目录浏览”并单击“启用”来轻松解决此问题。

就我而言,我可以直接访问文件,但不能访问文件夹。


-1

我输入的IP地址错误输入一位数字,这意味着该IP地址将输入我的其他服务器之一。当您从错误的计算机上获取.NET错误页面时,非常令人困惑!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.