在IIS 7中使用ASP MVC会导致HTTP错误403.14 - 禁止访问。

149

我正在开发一个ASP MVC网站项目。现在我有一个要求,要求我在开发过程中将其部署到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 Error 403.14 - Forbidden - The Web server is configured to not list the contents of this directory.)

我认为我漏了什么东西,但不知道是什么!尝试使用相同的结果部署System.Web.Mvc、System.Web.Abstraction和System.Web.Routing文件。每当我尝试按F5并运行应用程序时,它就能正常工作!


可能是ASP.NET MVC on IIS 7.5的重复问题。 - Fenton
34个回答

227

也许对某些人有用: 在将我的应用程序转换为MVC 4,并使用.NET Framework 4.5,在我的服务器上安装框架并使用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包时,它从我的Web.config中删除了runAllManagedModulesForAllRequests="true"。谢谢你在我彻夜努力解决这个问题之前提到了这一点。 - Schmalls
9
尽量避免使用此设置,可以通过添加路由模块来实现——http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html。 - Chris Herring
我曾经遇到过同样的问题,后来发现我没有将PrecompiledApp.config复制到部署中。将其放置在正确的位置并重新启动应用程序池就解决了我的问题。 - John Boker
2
第二个解决方案对我很有帮助(谢谢),但是我已经将相同的网站部署到数十个服务器上,而且在web.config中没有这些设置,直到今天才遇到此问题。是否存在一些更全局的设置会影响是否需要这些设置? - JLRishe

126

这里有一个SO的回答(链接),问题是:在iis7.5上部署基本的MVC 3时出现403 - Forbidden错误

运行aspnet_regiis -i。我经常发现你需要这样做才能使4.0应用程序正常工作。以管理员身份打开命令提示符(右键单击命令提示符图标并选择“以管理员身份运行”):

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中。 - Manish Gupta
安装完IIS之后,尽管.NET 4似乎已经注册了,但我仍然需要运行aspnet_regiis才能使一切正常工作。 - Brian
如果框架在IIS之前安装,那么您需要运行aspnet_regiis。 - Brettski
3
64位系统下,记得使用"Framework64"文件夹。也就是说,路径为:Windows\Microsoft.NET\Framework64\v4.xxx.xxx。 - grahamesd
对于此用途,aspnet_regiis的64位或32位版本都无所谓。这里列出了一些特殊情况:https://msdn.microsoft.com/zh-cn/library/k6h9cz8h.aspx#Anchor_1 - Brettski
请确保您的应用程序正在使用设置为.NET 4.0的应用程序池。 - 谢谢,终于成功部署了我的第一个.NET应用程序! +1 - benscabbia

36

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


16

问题出在过于确信自己知道自己在做什么!

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

因此,安装此组件解决了问题。


1
是的,对于我的情况来说,我的Windows 10本地IIS ASP.NET没有开启。请前往“打开或关闭Windows功能 > Internet信息服务 > 万维网服务 > 应用程序开发功能 > 勾选ASP.NET 3.5和ASP.NET 4.8”。 - sky91

9
我遇到了同样的问题。这篇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功能”对话框中,执行以下步骤:
  1. 导航到以下节点:Internet Information Services --> World Wide Web Services --> Common HTTP Features
  2. 确保选择“HTTP错误重定向”选项。

-或-

  1. 导航到以下节点:Internet Information Services --> World Wide Web Services --> Performance Features
  2. 确保选择“静态内容压缩”选项。选择任一选项后,单击“确定”以保存更改。
重新启用HTTP错误重定向模块或静态内容压缩模块可确保ASP.NET和IIS正确同步HTTP管道事件。这使URL路由模块能够处理无扩展名的URL。

7
在我的情况下,以下方法帮助了我解决问题:
  1. aspnet_regiis -i in Windows\Microsoft.Net\Framework

  2. Adding modules to system.webServer

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

我猜你忘了安装框架。但是以管理员身份打开命令提示符,并在 Windows\Microsoft.Net\Framework\v4.0.30319 中运行 aspnet_regiis -i。 - DeadlyChambers

7
尝试应用下面显示的以下设置:
1)在IIS服务器上,为IIS_IUSRS用户授予必要的权限(右键单击网站,然后编辑权限>安全)。

enter image description here

2) 如果您使用的是 .NET Framework 4,请确保您的网站所使用的 应用程序池 的 .NET Framework 版本为 v4.0

enter image description here

3) 以管理员身份打开命令提示符,并运行 iisreset 命令,以便重新启动 IIS服务器


提示:如果您在执行此操作后仍然遇到权限错误,则可能需要在 cmd 中以管理员身份执行 iisreset,以使您的站点在 IIS 中运行。 - Cory Koch

5
请确保你正在运行 x64,并且已经在应用程序池设置中启用了 32 位应用程序。

4
在“取消发布期间的预编译”上 - 我刚写完的一个Web服务在VS2015中出现了403.14错误,所以我在VS2013中重新写了它,但仍然出现了相同的错误。在这两种情况下,我都开启了“发布期间的预编译”。我取消了它,但仍然出现错误。在我的情况下,我还选择了“发布之前删除所有现有文件”,但没有将目标目录中的所有内容在复制新的已发布文件之前删除。如果您不这样做,则会留下一个“PrecompiledApp.config”文件,从而导致问题。一旦我删除了那个文件,在我的Web服务的VS2013和VS2015版本上都能正常运行。

4

我仔细阅读了这里的每个答案,希望能找到一个适用的解决方案,但后来才意识到我使用的是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 应用程序将可以直接使用。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接