IIS 7.5上的ASP.NET MVC

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

但是,每次我尝试运行一个MVC应用程序,我得到以下错误:

HTTP错误403.14 – 禁止Web服务器configuration为不列出此目录的内容。 详细

错误信息

Module DirectoryListingModule

通知ExecuteRequestHandler

处理程序StaticFile错误

代码0x00000000请求

URL http:// localhost:80 / mySite /

物理pathC:\ myProject \ mySite \

login方法匿名login

用户匿名

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

HTTP错误500.21 – 内部服务器error handling程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误的模块“ManagedPipelineHandler”

有没有其他的步骤,我忘了采取这项工作?

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

下面是IIS我已经安装的function。

替代文字

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

大卫·默多克评论说:

.net版本已经改变,因为这个答案已经发布。 检查框架的哪个版本在%windir%\ Microsoft.NET \ Framework64目录中,并在运行前相应地更改命令(目前为v4.0.30319)

还有一件事要确保你有你的web.config中的以下设置:

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

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

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

更好的scheme:

即使上面的解决scheme工作的非常好 ,但它可能会导致其他问题,因为它会在每个请求上运行所有已注册的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 ,“阅读原文”)

为什么有人可能会得到这个错误的另一个原因是,如果文件Global.asax不在根文件夹了。

我也收到了这个错误,发现Windows Server中没有打开“HTTPredirect”。 这个博客也指出了这一点: http : //blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx

甜蜜的耶稣。 我尝试了所有上述的事情(但发现我的设置相同)。 如果您有问题,还有其他解决scheme:

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

尝试为您的系统安装此KB。 如果你看到404s可能是因为你没有这个更新 – 而isapi模块没有find,没有这个,你可以做的事情没有太多!

你也可以切换AppPool集成模式。 Thnx到Michael Bianchi( https://stackoverflow.com/a/7956546/1143515 ),我只想强调一下。

对于我在一个Asp.Net MVC 5应用程序(bin部署MVC 5)的Azure Server 2012 R2 IIS 8.5 VM上,我不得不从提升的cmd提示符执行以下操作,即使我已经安装了4.5:

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

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

我还蛮力使用以下PowerShell安装所有IISfunction:

 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

现在我的应用正在工作。

另外如果你的应用程序是预编译的,你应该有

PrecompiledApp.config

在你的应用程序的根文件夹中,否则你可能会得到HTTP Error 403.14

我们有一个MVC应用程序移动到一个新的服务器。 .NET 4和MVC 3被安装,但我们仍然有“错误403.14”。 在这种情况下,这意味着IIS不知道它正在处理一个MVC应用程序,它正在寻找默认页面。

解决scheme很简单:服务器上没有安装HTTPredirect。

服务器pipe理器 – angular色 – Web服务器(IIS) – angular色服务 – HTTPredirect:未安装。 安装好了,问题解决了。

另一个可能的解决scheme,如果你移动你的global.asax,确保标记指向正确的MvcApplication类。 希望这将会拯救未来的人。

我曾经使用WebDeploy IIS扩展将我的网站从IIS6导入到IIS7.5,所以所有的IIS设置都与在生产环境中一样。 在尝试了这里提供的所有解决scheme之后,其中没有一个为我工作,只需将网站的“应用程序池”设置从“经典”更改为“集成”即可。

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

我从一个点改变了我的默认路由:

 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" } 

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

在我的情况下,ASP.NET 4.5没有安装在服务器上,所以安装ASP.NET 4.5修复了这个问题。

您可以通过以admin身份运行cmd来解决此错误 在这里输入图像描述

做相同的图片为Windows 32位

只需将64位的更改作为framework64而不是框架即可。请转到iis并刷新网站
如果你仍然有一些错误在应用程序池中进行更改

我有另一个问题,导致这个问题。

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

这些事情都没有奏效。 原来,在我的web.config下system.webserver>模块我有以下几点:

 <remove name="WindowsAuthentication" /> 

显然,这删除了Windows身份validation模块,似乎以某种方式击倒了所有的事情。

我希望这有助于某人,因为这花了我一个晚上的大部分时间!

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

在我的Global.asax.cs文件中,我使用以下方法禁用了MVCpipe道使用的尝试php文件:

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

我以前在MVC2项目中完成了这些工作,并且工作正常,但是在我的MVC 3应用程序中这样做导致了上面报告的问题。

还有一个原因可能会发生 – 您的RouteConfig.csWebApiConfig.cs是无效的。

在我的情况下,我有一个路由定义为(注意括号,而不是花括号):

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

请注意,对于Windows 8用户,您需要添加/删除Windows组件,并删除.net reboot的版本,然后重新安装以注册到IIS。 我认为这会发生,如果你从Visual Studio中得到.net 4.5,然后安装IIS。

看起来很奇怪, 重新安装IIS是为我工作,以下命令从.net版本文件夹中运行:

 aspnet_regiis.exe /i 

在这里输入图像描述

当我第一次运行这个命令,我开始得到HTTP错误403.14。 但是一旦我再次运行命令,就解决了这个问题。

Obs :我还做的另一件事是在重新安装IIS之前,从服务器pipe理屏幕中的服务器function中删除HTTPredirect。 也许这对解决问题也有影响,但是我不确定。 所以,如果重新安装IIS仍然无效,请尝试删除HTTPredirect并重试。 希望它也可能适用于你。

要解决这个问题,而不必诉诸于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

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

也许所有所需的组件都不存在或/并不是所有组件都被正确注册。 为了解决此问题,请尝试取消选中控制面板中的所有选项 – >打开或closuresWindowsfunction – > Internet信息服务 – >万维网服务 – >应用程序开发function,取消选中所有选项并重新检查所有选项,然后重置IIS检查问题是否解决。

在这里输入图像描述

如果您在Windows 8或Server 2012上运行IIS 8.5,则可能发现运行mvc 4/5(.net 4.5)在虚拟目录中不起作用。 如果您在主机文件中创build一个本地主机条目以指向您的本地机器,然后将一个新的本地IIS网站指向该文件夹(具有匹配的主机标题条目),那么您会发现它可以正常工作。

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

对我而言,解决scheme是将NuGet包Microsoft.AspNet.WebPages(加上它的Razor和基础架构依赖项)添加到我的Web项目中。

基础设施必须强制重新安装,因为起初并没有将其作为参考。

在我的情况下,应用程序池prppertires中的.NET CRL版本被设置为无托pipe代码(不知道为什么)。 将其设置为.NET CRL版本v4.0.30319解决了这个问题。