ASP.NET MVC 在 IIS 7.5 上 - 错误 403.14 禁止访问

342

我正在运行Windows 7 Ultimate(64位),使用Visual Studio 2010 RC。最近,我决定让VS在IIS上运行/调试我的应用程序,而不是使用其中的开发服务器。

然而,每次我尝试运行MVC应用程序时,都会出现以下错误:

HTTP错误403.14 - 禁止访问:Web服务器配置为不列出此目录的内容。详细信息

错误信息

模块 DirectoryListingModule

通知 ExecuteRequestHandler

处理程序 静态文件错误

代码 0x00000000 请求的

URL http://localhost:80/mySite/

物理路径 C:\myProject\mySite\

登录方法 匿名登录

用户 匿名

我在该目录中放置了一个 default.aspx 文件,但收到了以下错误:

HTTP错误500.21 - 内部服务器 错误处理程序"PageHandlerFactory-Integrated"在其模块列表中具有 错误的模块 "ManagedPipelineHandler"

是否有其他步骤我忘记了以使其正常工作?

注:我安装了IIS 7.5,然后安装了VS 2010 RC。我在Visual Studio 2010的MVC项目的“属性”下的“Web”选项卡中使用了内置的“创建虚拟目录”按钮。我确保应用程序正在使用ASP.NET 4应用程序池。

以下是我拥有的IIS安装功能。

输入图像描述


5
我也遇到了同样的问题。我已将应用程序设置为使用4.0继承模式,运行了注册命令以将.NET与IIS(7.5)注册,但仍然遇到这个错误。 - Collin White
2
我终于找到了我的设置中的问题,那就是我将文件“_Layout.cshtml”重命名为“_PageLayout.cshtml”,并且在“_ViewStart.cshtml”中进行了相应的更改,但显然这还不够。一旦我将名称恢复为“_Layout.cshtml”,它就开始工作了。令人困惑的是,“_PageLayout.cshtml”在Win7 32位上被正确捕获,但在Win7 64位或WinSvr2K8 R2上未被捕获。 - Umar Farooq Khawaja
3
有人在Windows 8和IIS 8上找到了解决方案吗? - Eric Z Beard
3
如果您使用的是Windows Server 2012或Windows 8,请查看以下链接:https://dev59.com/kWct5IYBdhLWcg3wXsbH - Lomak
我发现我必须在IIS中重新创建我的应用程序才能使其正常工作。 - Ben Power
显示剩余5条评论
28个回答

499

ASP.NET 4没有在IIS中注册。必须在命令行或运行中运行以下命令:

32位(x86)Windows

%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -ir

64位(x64)Windows

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir

David Murdoch的评论提醒注意:

自此答案发布以来,.NET版本已更改。 在运行命令之前,请检查% windir%\Microsoft.NET\Framework64目录中的框架版本,并相应更改命令(当前为v4.0.30319)。


9
请注意在64位Windows系统中的Framework64!这个问题让我很崩溃。我可能已经安装了32位版本4或5次,但都没有效果。请注意在Framework64中的“64”,以免再次犯错。 - Ben Lesh
14
自此回答发布后,.Net 版本已更改。在运行命令之前,请检查 %windir%\Microsoft.NET\Framework64 目录中框架的版本,并相应更改命令(当前为 v4.0.30319)。 - David Murdoch
1
补充@blesh所说的,如果你有64位系统并运行32位的aspnet_regiis.exe,它可能只会重新显示选项而不执行任何操作。 - xster
3
如果在 .net framework 文件夹中找不到 aspnet_regiis.exe 命令,则需要下载完整的 .net framework 安装程序。下载链接为:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17851 - warrickh
11
顺便说一下,在IIS8中这不起作用。如果你尝试,你会收到“此选项不受操作系统版本支持的信息。管理员应该使用“打开/关闭Windows功能”对话框、服务器管理工具或dism.exe命令行工具来安装/卸载ASP.NET 4.5与IIS8。请参阅http://go.microsoft.com/fwlink/?LinkID=216771获取更多详细信息。” - Mastro
显示剩余4条评论

199

还有一件事情需要确保在你的web.config文件中进行如下设置:

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

8
如果您不想设置runAllManagedModulesForAllRequests(即使对于静态文件也会运行),您可以安装微软的热修复程序:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=5272。 - Justin Helgerson
10
通过添加路由模块来避免这种情况:http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html - Chris Herring
如果您正在使用VS2013并尝试在IIS 7.5上运行 - 您需要添加此内容。 - KenL

77

请确保您的web.config文件中设置了以下内容:

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

更好的解决方案:

虽然上面的解决方案完全可行,但它可能会导致其他问题,因为它在每个请求上运行所有已注册的HTTP模块(甚至在每个.jpg .gif .css .html .pdf等请求上),这显然是浪费资源的。相反,

<system.webServer>
<modules>
  <remove name="UrlRoutingModule-4.0"/>
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" preCondition="" />
</modules>
</system.webServer>

确保preCondition属性为空,这意味着它将在所有请求上运行。 [阅读更多](http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html,"阅读原始帖子")


6
这解决了我MVC应用程序根目录下403.14的问题以及其他控制器方法404的问题。不过还有点不对劲,因为我在同一台服务器上运行另一个具有相同可见站点设置的应用程序,它可以在没有这个设置的情况下工作。这是由VS 2012提供的SPA项目模板创建的web.config,在我的计算机上运行良好,但发布后却不能正常工作。 - shannon
4
是的,所以我的开发设备包含在Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config中的<system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />,并且看起来已经在我安装VS 2012的日期进行了修改。那么,下一个问题是,我的其他项目中有什么可以使其正常运行? - shannon
请注意,显然不是顶部解决方案建议的 %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir,该解决方案设置了必须存在于我的开发设备上的任何默认值。一旦我删除了 UrlRoutingModule 引用,该命令对我无效。 - shannon
能够在 Windows Server 2008 R2 IIS 7 上运行,适用于 ASP.NET MVC 5。谢谢! - Ervi B

42

出现这个错误的另一个原因是Global.asax文件不再在根目录中了。


3
对我也起了作用:在发布选项中关闭预编译(仅影响global.asax文件)。 - Richard
在我的情况下,使用网站而不是Web应用程序,Global.asax文件必须说CodeFile="Global.asax.cs"而不是CodeBehind="Global.asax.cs"。VS UI似乎与我作斗争,以防止正确创建它,可能是因为我是从头开始创建网站,而不是使用模板。 - Jordan Rieger

20

对于Windows 8,在启用HTTP重定向后,我仍然遇到错误。必须进行第二步操作:在Internet Information Services -> World Wide Web Services -> Application Development Features下添加ASP.NET 4.5角色。http://serverfault.com/questions/514091/iis-8-asp-net-mvc-http-error-500-19 - dreamerkumar

15
根据http://support.microsoft.com/kb/980368,尝试为您的系统安装此KB。如果您看到404错误,可能是因为您没有此更新 - 并且isapi模块无法被找到,没有太多可以在没有此更新的情况下做的事情!

7
在Azure Server 2012 R2上,我有一个安装了Asp.Net MVC 5应用程序(bin deployed MVC 5)的IIS 8.5虚拟机。尽管我已经安装了4.5版本,但我还需要从已提升权限的cmd提示符中执行以下操作:
dism /online /enable-feature /featurename:IIS-ASPNET45

来源: http://support.microsoft.com/kb/2736284

我还使用以下 PowerShell 命令强制安装了所有 IIS 功能:

import-module servermanager
add-windowsfeature web-server -includeallsubfeature

来源:http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2

现在我的应用程序正常工作。


“dism” 这个方法对我有用(没有应用其他建议的更改)。我只需要将 “/all” 开关放到最后,以确保所有“父级”功能也被安装。 - Jeroen Ritmeijer
这对我起作用。在 Windows Server 2012 上运行带有 .NET 4.5 的 MVC 5。默认情况下,IIS 不会安装 .NET 4.5。 - DPac

7

6

我们将一个MVC应用程序迁移到了新的服务器上。安装了.NET 4和MVC 3,但仍然出现“错误403.14”。在这种情况下,这意味着IIS无法理解它正在处理一个MVC应用程序,而是正在寻找默认页面。

解决方案很简单:服务器上没有安装HTTP重定向。

服务器管理器 - 角色 - Web服务器(IIS)- 角色服务 - HTTP重定向:未安装。安装它,问题得以解决。


1
什么是服务器管理器?我在哪里可以找到它? - Elad Katz
服务器管理器位于管理工具中。 - udog

5
如果您的应用程序是预编译的,那么您应该在应用程序的根目录下拥有 PrecompiledApp.config 文件,否则您可能会遇到 HTTP Error 403.14 错误。

我不知道为什么那个文件在那里,尽管我的应用程序没有预编译。删除了该文件后,现在它可以正常工作了。谢谢! - vaindil
如果我在自己花费2个小时解决它之前看到了这个答案,我会非常高兴。 - yakya

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