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.cs
或WebApiConfig.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项目讨论板上的讨论。
这对我有用,它可能对另一个有用。
也许所有所需的组件都不存在或/并不是所有组件都被正确注册。 为了解决此问题,请尝试取消选中控制面板中的所有选项 – >打开或closuresWindowsfunction – > Internet信息服务 – >万维网服务 – >应用程序开发function,取消选中所有选项并重新检查所有选项,然后重置IIS检查问题是否解决。
如果您在Windows 8或Server 2012上运行IIS 8.5,则可能发现运行mvc 4/5(.net 4.5)在虚拟目录中不起作用。 如果您在主机文件中创build一个本地主机条目以指向您的本地机器,然后将一个新的本地IIS网站指向该文件夹(具有匹配的主机标题条目),那么您会发现它可以正常工作。
我创build了一个新的命名空间(因此文件夹)与控制器的路由相同(例如MvcApp/Test/SomeClasses.cs
和MvcApp/Controllers/TestController.cs
)。 这也导致了403.14!
对我而言,解决scheme是将NuGet包Microsoft.AspNet.WebPages(加上它的Razor和基础架构依赖项)添加到我的Web项目中。
基础设施必须强制重新安装,因为起初并没有将其作为参考。
在我的情况下,应用程序池prppertires中的.NET CRL版本被设置为无托pipe代码(不知道为什么)。 将其设置为.NET CRL版本v4.0.30319解决了这个问题。