IIS 7.5上的ASP.NET MVC


338

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

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

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

错误信息

模块目录列表模块

通知ExecuteRequestHandler

处理程序StaticFile错误

请求代码0x00000000

网址 http:// localhost:80 / mySite /

物理路径C:\ myProject \ mySite \

登录方法匿名登录

用户匿名

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

HTTP错误500.21-内部服务器错误处理程序“ PageHandlerFactory-Integrated”在其模块列表中包含错误的模块“ ManagedPipelineHandler”

我还没有采取其他任何步骤来使此工作正常进行吗?

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

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

替代文字


好的,我有一个类似的问题,它仅在ASP.NET MVC 3网站上显示。ASP.NET MVC 2网站可以正常工作。我在网站的根目录中放置了一个Default.aspx文件,它被选中了,没问题。我已经使用VS2010 SP1对ASP.NET MVC 3网站进行了bin-deploy,但仍然无法实现。我为此尽全力。
Umar Farooq Khawaja

5
我遇到同样的问题。我已将应用程序设置为使用4.0集成,运行了注册命令以向IIS(7.5)注册.NET,仍然出现此错误。
Collin White

2
我终于能够在设置中找到问题,那就是我已将文件重命名为_Layout.cshtml_PageLayout.cshtml并且也进行了相应的更改_ViewStart.cshtml,但是显然这还不够。将名称恢复为后_Layout.cshtml,它开始起作用。令人困惑的是,它_PageLayout.cshtml在Win7 32位上正确地被拾取,但是在Win7 64位或WinSvr2K8 R2上却没有被拾取。
Umar Farooq Khawaja

3
有人在带有IIS 8的Windows 8上找到解决方案吗?
Eric Z Beard '10

3
如果你在Windows Server 2012或窗口8看到这一点:[ stackoverflow.com/questions/12134713/... [1]:stackoverflow.com/questions/12134713/...
Lomak

Answers:


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中的“ 64”!在* ss中咬住了我。我必须将32位版本4或5次安装都没有效果。
Ben Lesh

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

1
添加到@blesh,如果您具有64位并运行32位aspnet_regiis.exe,则可能只是向您显示选项而无所事事
xster 2012年

3
如果ASPNET_REGIIS.EXE命令是从.NET框架文件夹丢失,请下载完整的.NET框架安装microsoft.com/download/en/...
warrickh

11
如果您尝试获取“此版本的操作系统不支持此选项,则在IIS8 btw中不起作用。管理员应改为使用“打开/关闭Windows功能”来使用IIS8安装/卸载ASP.NET 4.5。对话框,服务器管理器管理工具或dism.exe命令行工具。有关更多详细信息,请访问go.microsoft.com/fwlink/?LinkID=216771
Mastro

199

确保您拥有的另一件事是web.config中的以下设置:

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

23
对我来说就做到了。谢谢
博卡

5
也为我解决了。奇怪的是,无需该设置,它就可以在VS2010 IIS Express中本地工作。
Phil

8
如果您不想设置runAllManagedModulesForAllRequests(甚至对于静态文件也可以运行),则可以安装Microsoft修复程序: microsoft.com/download/en/…
贾斯汀·赫尔森

10
尝试通过添加路由模块来避免这种情况:britishdeveloper.co.uk/2010/06/…–
克里斯·赫林

如果您使用VS2013并试图在IIS 7.5上运行-您需要添加它
KenL 2014年

77

确保您的web.config中具有以下设置:

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

更好的解决方案:

即使上述解决方案绝对可以正常工作,但由于它会在每个请求(甚至是.jpg .gif .css .html .pdf等的每个请求)上运行所有已注册的HTTP模块,因此可能导致其他问题,并且显然浪费资源。代替

<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
这将403.14固定在根上,并将404固定在我的MVC应用程序的其他控制器方法上。但是,这里仍然有些麻烦,因为我在同一服务器上运行了另一个具有相同可见站点设置的应用程序,并且在没有此设置的情况下也可以运行。这是由VS 2012提供的SPA项目模板创建的web.config,可以在我的盒子上正常工作,但发布时不行。
香农

4
是的,所以我的开发设备<system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />在中安装了,Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config并在VS 2012安装日期被修改。那么,下一个问题是,我的另一个项目中允许它运行的是什么?
香农

请注意,显然不是%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir最佳解决方案建议您设置开发设备上必须存在的任何默认值。一旦删除UrlRoutingModule引用,该命令就无法为我解决问题。
香农

在ASP.NET MVC 5的Windows Server 2008 R2 IIS 7上可以使用。谢谢!
Ervi B 2016年

42

有人可能会收到此错误的另一个原因是,文件Global.asax不在根文件夹中了。


4
是的-我编写的安装程序没有带来此文件。谢谢!
zadam

4
这也是我的问题。基于403的症状,我从未想到我的应用程序缺少Global.asax
Saul Dolgin 2013年

3
还为我修复了该问题:在发布选项中关闭了预编译(global.asax仅受文件影响)。
理查德

1
这确实对我有用。事实是,对于我来说,我也听到许多其他消息,每发布其他一次,就会生成global.asax。是否有人想出每次生成它的方法?
格雷格·Z。

谢谢,解决了我的问题。应用程序在ASP.NET MVC 4.0,Framework 4.0上运行。托管在Arvixe上。
乔·金

20

我也收到此错误,并发现Windows Server中未打开“ HTTP重定向”。该博客文章也指出了这一点:http : //blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx


6
在所有该死的事情中,就是这样。我四处张望,用安全设置玩了几个小时,aspnet_regiis等等。在一个易碎的kaiser卷的甜小耶稣。
Andrew Backer 2012年

我为此花了一整天。非常感谢。
Pradeep 2012年

对于Windows 8,启用HTTP重定向后仍然出现错误。不得不这样做是为第二步:在Internet Information Services外接ASP.NET 4.5的角色- >万维网服务- >应用程序开发功能serverfault.com/questions/514091/...
dreamerkumar

第二站解决了我的问题。有些机器在没有它的情况下工作,但是其他机器则是必不可少的。谢谢。
Alexis Heijmeijer '17

15

甜心的耶稣。我尝试了上述所有操作(但发现我的设置相同)。还有其他解决方案,如果您遇到问题:

http://support.microsoft.com/kb/980368

尝试为您的系统安装此KB。如果您看到的是404,则可能是因为您没有此更新-找不到isapi模块,没有这个,您将无能为力!


1
在运行Server 2008 SP2(不是R2)的32位服务器上为我解决了
Simon C


7

对于我而言,在具有Asp.Net MVC 5应用程序(bin部署了MVC 5)的Azure Server 2012 R2 IIS 8.5 VM上,即使我已经安装了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

现在我的应用程序正在运行。


“歧视”对我有用(不应用任何其他建议的更改)。我只需要将'/ all'开关切换到末尾,以确保也安装了所有'parent'功能。
Jeroen Ritmeijer

这对我有用。在Windows Server 2012上运行带有.NET 4.5的MVC5。默认情况下,IIS无法安装.NET 4.5。
DPac

6

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

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

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


1
什么是服务器管理器?我在哪里找到它?
Elad Katz'3

服务器管理器位于管理工具中
udog,2015年

5

另外,如果您的应用已预编译,则应该

PrecompiledApp.config

在应用程序的根文件夹中,否则也可以获取HTTP Error 403.14


尽管我的应用程序未预编译,但由于某种原因我在那里保存了文件。删除了文件,现在可以使用了。谢谢!
vaindil '16

如果在花了2个小时并自己解决问题之前看到这个答案,我会感到非常高兴
。–

4

另一个可能的解决方案是,如果您在global.asax中移动,请确保标记指向正确的MvcApplication类。希望这会在将来拯救某人。


4

我曾使用WebDeploy IIS Extension将网站从IIS6导入IIS7.5,因此所有IIS设置都与生产环境中的设置完全相同。在尝试了这里提供的所有解决方案后,其中一个对我都不起作用,我只需要将网站的“应用程序池”设置从“经典”更改为“集成”即可。


4

我突然遇到了相同的404.14问题。最后,通过在发布配置文件设置中取消选中“发布时预编译”,解决了该问题。


同样在这里。直到今天发布才成为问题-取消选中即可解决。反正很奇怪
鲁弗爵士,

4

我从以下位置更改了默认路线:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }

至:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index" }

这给了我你的错误。很高兴有人提到路由,因为我可能永远都会这样做。


4

在我的情况下,服务器上未安装ASP.NET 4.5,因此安装ASP.NET 4.5可解决此问题。


4

您可以通过以管理员身份运行cmd来解决此错误, 在此处输入图片说明

对于Windows 32位,与图片相同

只需在64位上将其更改为framework64而不是仅框架即可进行更改,比去iis刷新站点
如果您仍然遇到一些错误,请在应用程序池中进行更改


3

我还有另一个问题导致了这个问题。

  • 我已经确保我的应用程序池以集成模式运行.net 4
  • 我已经运行过aspnet_regiis.exe -i
  • 我检查了为运行我的应用程序池的帐户设置的文件夹权限是否正确

这些都不起作用。事实证明,在我的web.config中的system.webserver>模块下,我具有以下内容:

<remove name="WindowsAuthentication" />

显然,这删除了Windows身份验证模块,该模块似乎以某种方式将一切都击倒了。

我希望这对某人有帮助,因为这使我花费了大部分时间!



2

为此问题添加另一个解决方案。

在我的Global.asax.cs文件中,我使用以下命令禁止了php文件被MVC管道使用:

routes.IgnoreRoute( "{*php}" );

我以前曾在MVC2项目中完成过这些工作,但效果很好,但是在我的MVC 3应用程序中这样做导致了上面报告的问题。


2

发生这种情况的另一个原因-您的RouteConfig.csWebApiConfig.cs无效。

就我而言,我有一条这样定义的路由(请注意括号而不是花括号):

...
routeTemplate: "api/(something}"
...

这个对我有用!万一我改变了routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );。当我固定id = UrlParameter.OptionalrepositoryId = UrlParameter.Optional它上开始工作!
Dmitresky

2

请注意,对于Windows 8用户,您需要添加/删除Windows组件并删除.net重新启动的版本,然后重新安装才能在IIS中注册。我认为如果您从Visual Studio获得.net 4.5并随后安装IIS,则会发生这种情况。


2

看起来似乎很奇怪,重新安装IIS对我而言却行之有效,在.net版本文件夹中运行以下命令:

aspnet_regiis.exe /i

在此处输入图片说明

第一次运行此命令时,我开始收到HTTP错误403.14。但是,一旦我再次运行命令,它就解决了问题。

Obs:我还做的另一件事是在重新安装IIS之前,从“服务器管理”屏幕的服务器功能中删除HTTP重定向。也许这对解决问题也有影响,但是我不确定。因此,如果仍然无法重新安装IIS,请尝试删除HTTP重定向,然后重试。希望它也对您有用。


FYI aspnet_regiis.exe不会安装或重新安装IIS,它只是注册特定的.NET Framework版本,因此IIS可以使用它来承载应用程序。
斯蒂芬,2015年

1

要解决此问题而不必求助于32位模式,则必须更新此项目的源代码

public static void RegisterUrlRoutesFromAttributes(RouteCollection routes)
{
    // Enumerate assembly for UrlRoute attributes.
    List<MapRouteParams> routeParams = new List<MapRouteParams>();
    AppDomain.CurrentDomain.GetAssemblies()
        .ToList()
        .ForEach(assembly => routeParams.AddRange(GetRouteParamsFromAttributes(assembly)));

我已经在IT云Codeplex项目的讨论板上进行了讨论,提出了这个问题。

http://itcloud.codeplex.com/discussions/262000


1

这对我有用,对另一个人可能有用。

可能所需的所有组件都不存在或/并且并非所有组件均已正确注册。为了解决此问题,请尝试取消选中控制面板中的所有选项->打开或关闭Windows功能-> Internet信息服务->万维网服务->应用程序开发功能,取消选中所有选项,然后重新选中所有选项,然后重置IIS和检查问题是否解决。

在此处输入图片说明


1

如果您在Windows 8或Server 2012上运行IIS 8.5,则可能会发现在虚拟目录中无法运行mvc 4/5(.net 4.5)。如果在主机文件中创建本地主机条目以指向本地计算机,然后将新的本地IIS网站指向该文件夹(带有匹配的主机头条目),则可以正常使用。


0

我创建了一个新的名称空间(并因此创建了文件夹),该名称空间与到控制器的路由(例如MvcApp/Test/SomeClasses.csMvcApp/Controllers/TestController.cs)相同。这也导致了403.14!


0

对我来说,解决方案是将NuGet包Microsoft.AspNet.WebPages(以及Razor和Infrastructure依赖项)添加到我的Web项目中。

必须先强制​​重新安装基础结构,因为最初并未将其添加为参考。


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.