IIS 7.5 上的 ASP.NET MVC

Posted

技术标签:

【中文标题】IIS 7.5 上的 ASP.NET MVC【英文标题】:ASP.NET MVC on IIS 7.5 【发布时间】:2011-01-23 09:58:09 【问题描述】:

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

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

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

错误信息

模块目录ListingModule

通知ExecuteRequestHandler

处理程序静态文件错误

请求代码 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 应用程序池。

下面是我安装的IIS功能。

【问题讨论】:

好的,我有一个类似的问题,它只出现在 ASP.NET MVC 3 网站上。 ASP.NET MVC 2 网站运行良好。我在网站的根目录中放置了一个 Default.aspx 文件,它被拾取好了,没问题。我已经使用 VS2010 SP1 对 ASP.NET MVC 3 网站进行了 bin 部署,但仍然没有乐趣。我对此束手无策。 我也有同样的问题。我已将应用程序设置为使用 4.0 集成,运行注册命令向 IIS (7.5) 注册 .NET,但仍然出现此错误。 我终于在我的设置中找到了问题,我将文件_Layout.cshtml重命名为_PageLayout.cshtml,并在_ViewStart.cshtml中也做了相应的更改,但是显然这还不够。一旦我将名称恢复为_Layout.cshtml,它就开始工作了。令人困惑的是,_PageLayout.cshtml 在 Win7 32 位上被正确拾取,但在 Win7 64 位或 WinSvr2K8 R2 上没有被拾取。 有没有人在带有 IIS 8 的 Windows 8 上找到解决方案? 如果您使用的是 Windows Server 2012 或窗口 8,请参阅:[***.com/questions/12134713/… [1]:***.com/questions/12134713/… 【参考方案1】:

较新版本的 Windows Server 中的 UI 略有不同。在这里您必须启用 ASP.Net 才能使其在 IIS 上运行

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

对我来说,解决方案是将 NuGet 包 Microsoft.AspNet.WebPages(加上它的 Razor 和基础结构依赖项)添加到我的 Web 项目中。

基础设施必须强制重新安装,因为它最初没有作为参考添加。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

这对我有用,可能对其他人有用。

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

【讨论】:

【参考方案6】:

虽然看起来很奇怪,但重新安装 IIS 对我有用,在 .net 版本文件夹中运行以下命令:

aspnet_regiis.exe /i

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

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

【讨论】:

仅供参考 aspnet_regiis.exe 不会安装或重新安装 IIS,它只是注册一个特定的 .NET 框架版本,以便 IIS 可以使用它来托管应用程序。【参考方案7】:

您可以通过以管理员身份运行 cmd 来解决此错误 比

对 Windows 32 位执行与图片中相同的操作

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

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

对于我在带有 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

现在我的应用正在运行。

【讨论】:

'dism' 对我有用(没有应用任何其他建议的更改)。我只需将“/all”开关切换到最后,以确保所有“父”功能都已安装。 这对我有用。在 Windows Server 2012 上运行带有 .NET 4.5 的 MVC 5。默认情况下,IIS 不会安装 .NET 4.5。【参考方案10】:

在我的情况下,服务器上没有安装 ASP.NET 4.5,因此安装 ASP.NET 4.5 解决了这个问题。

【讨论】:

【参考方案11】:

我在某一时刻更改了我的默认路线:

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" 

这给了我你的错误。很高兴有人提到路由,因为我可能会一直在这方面。

【讨论】:

【参考方案12】:

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

【讨论】:

【参考方案13】:

这可能发生的另一个原因 - 您的 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.Optional 固定在repositoryId = UrlParameter.Optional 上时,它就开始工作了!【参考方案14】:

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

【讨论】:

这里也一样。直到今天发布都没有问题 - 取消选中解决了它。反正很奇怪【参考方案15】:

确保您的 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,"阅读原帖")

【讨论】:

这修复了根目录上的 403.14,以及我的 MVC 应用程序的其他控制器方法上的 404。但是,这里仍有一些可疑之处,因为我在同一台服务器上运行了另一个应用程序,具有相同的可见站点设置,并且它在没有此设置的情况下也能正常工作。这是由 VS 2012 提供的 SPA 项目模板创建的 web.config,在我的盒子上运行良好,但在发布时无法正常工作。 是的,所以我的开发设备包含&lt;system.web&gt;&lt;httpModules&gt;&lt;add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" /&gt;,在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。谢谢!【参考方案16】:

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

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

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

【讨论】:

什么是服务器管理器?我在哪里可以找到它? 服务器管理器位于管理工具中【参考方案17】:

我遇到了另一个导致此问题的问题。

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

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

<remove name="WindowsAuthentication" />

显然,这删除了 ​​Windows 身份验证模块,该模块似乎以某种方式打破了一切。

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

【讨论】:

【参考方案18】:

如果你的应用是预编译的,你应该有

PrecompiledApp.config

在您应用的根文件夹中,否则您也可以获得HTTP Error 403.14

【讨论】:

尽管我的应用程序没有预编译,但由于某种原因我把文件放在那里。删除了文件,现在可以使用了。谢谢! 如果我在花了 2 个小时自己解决问题之前看到了这个答案,我会非常高兴..【参考方案19】:

亲爱的耶稣。我尝试了上述所有方法(但发现我的设置相同)。如果您遇到问题,还有另一种解决方案:

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

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

【讨论】:

在运行 Server 2008 SP2(不是 R2)的 32 位服务器上为我解决了【参考方案20】:

您也可以将 AppPool 切换到 Integrated 模式。感谢 Michael Bianchi (https://***.com/a/7956546/1143515),我只想强调这一点。

【讨论】:

【参考方案21】:

我曾使用 WebDeploy IIS Extension 将我的网站从 IIS6 导入到 IIS7.5,因此所有 IIS 设置与它们在生产环境中的设置完全相同。在尝试了这里提供的所有解决方案后,没有一个对我有用,我只需将网站的 App Pool 设置从 Classic 更改为 Integrated。

【讨论】:

【参考方案22】:

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

【讨论】:

【参考方案23】:

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

【讨论】:

在所有该死的事情中,就是这样。我到处找,玩了几个小时的安全设置,aspnet_regiis,等等。易碎的凯撒卷上的甜蜜宝贝耶稣。 我为此花了一整天的时间。非常感谢。 对于 Windows 8,我在启用 HTTP 重定向后仍然出现错误。第二步必须这样做:在 Internet Information Services -> World Wide Web Services -> Application Development Features serverfault.com/questions/514091/… 下添加 ASP.NET 4.5 角色 第二站解决了我的问题。有些机器没有它就可以工作,但其他机器这是必不可少的。谢谢。【参考方案24】:

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

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

routes.IgnoreRoute( "*php" );

我之前在 MVC2 项目中完成了这些操作,并且效果很好,但是在我的 MVC 3 应用程序中执行此操作导致了上面报告的问题。

【讨论】:

【参考方案25】:

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

【讨论】:

是的 - 我写的安装程序没有带这个文件。谢谢! 这也是我的问题。我永远不会根据 403 症状猜到我的应用程序缺少 Global.asax 还为我修复了它:关闭了发布选项中的预编译(global.asax 仅受影响的文件)。 这对我有用。问题是,对我来说,我听到很多其他人,global.asax 每次我发布时都会生成。有没有人想办法每次都生成它? 谢谢,解决了我的问题。应用程序在 ASP.NET MVC 4.0、Framework 4.0 上运行。托管在 Arvixe 上。【参考方案26】:

ASP.NET 4 未在 IIS 中注册。必须在命令行/运行中运行以下命令

32 位 (x86) 窗口

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

64 位 (x64) 窗口

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

大卫默多克评论的注释:

.net 版本已更改 自发布此答案以来。查看 哪个版本的框架在 %windir%\Microsoft.NET\Framework64 目录并更改命令 因此在运行之前(它是 目前 v4.0.30319)

【讨论】:

注意 Framework64 中的“64” 用于 64 位 Windows!那在* ss中咬了我。我必须安装 32 位版本 4 或 5 次没有效果。 自发布此答案以来,.net 版本已更改。 检查%windir%\Microsoft.NET\Framework64目录中的框架版本,并在运行前相应更改命令(目前是v4.0.30319)。 添加到@blesh,如果你有 64 位并运行 32 位 aspnet_regiis.exe,它可能只是重新显示选项而什么都不做 如果 .net 框架文件夹中缺少 aspnet_regiis.exe 命令,请下载完整的 .net 框架安装程序microsoft.com/download/en/… 顺便说一句,这在 IIS8 中不起作用,如果您尝试得到“此版本的操作系统不支持此选项。管理员应改为使用 IIS8 安装/卸载 ASP.NET 4.5 “打开/关闭 Windows 功能”对话框、服务器管理器管理工具或 dism.exe 命令行工具。有关详细信息,请参阅go.microsoft.com/fwlink/?LinkID=216771。”【参考方案27】:

要在不使用 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

【讨论】:

【参考方案28】:

还要确保您在 web.config 中有以下设置:

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

【讨论】:

这对我有用。谢谢 也为我解决了。奇怪的是它在没有该设置的情况下在 VS2010 IIS Express 中本地工作。 如果您不想设置runAllManagedModulesForAllRequests(即使是静态文件也会运行),您可以安装 Microsoft 修补程序:microsoft.com/download/en/…。 尝试通过添加路由模块来避免这种情况:britishdeveloper.co.uk/2010/06/… 如果你使用 VS2013 并尝试在 IIS 7.5 上运行 - 你需要添加这个

以上是关于IIS 7.5 上的 ASP.NET MVC的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net MVC 3/4 托管在 IIS 7.5 默认处理程序映射上

ASP.Net / IIS 7.5 无法识别用于 OutputCache 的 jMeter

IIS 7.5 上的调试与发布模式

IIS 7.5 ASP.Net 和远程共享

IIS 7.5、ASP.NET、模拟和访问 C:\Windows\Temp

IIS 7.5 中的 Asp.net mvc 4 应用程序问题