asp.net-mvc 使 ASP.MVC2/VS2010 应用程序在 IIS 7.5 中工作

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1852251/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-07 23:58:36  来源:igfitidea点击:

Getting an ASP.MVC2/VS2010 application to work in IIS 7.5

asp.net-mvcvisual-studio-2010iis-7.5

提问by Jeroen-bart Engelen

I've recently downloaded beta 2 of VS2010 and started playing with ASP.NET MVC2. Initial development was done with Casini, but now I wanted to run the application from IIS 7.5 (I'm running Windows 7). I've installed the IIS6 metabase compatiblity and I run VS2010 as administrator so I can use the "Create Virtual Directory" button from the "Web" tab of the project settings. This created the web application entry in IIS, but it doesn't work.

我最近下载了 VS2010 的 beta 2 并开始使用 ASP.NET MVC2。最初的开发是用 Casini 完成的,但现在我想从 IIS 7.5 运行应用程序(我运行的是 Windows 7)。我已经安装了 IIS6 元数据库兼容性并以管理员身份运行 VS2010,因此我可以使用项目设置的“Web”选项卡中的“创建虚拟目录”按钮。这在 IIS 中创建了 Web 应用程序条目,但它不起作用。

When I go to the main page (http://localhost/MyMvcApp/) I get a HTTP 403 error. When I go directly to one of the sub-pages (http://localhost/MyMvcApp/Home/) I get an HTTP 404.

当我转到主页 ( http://localhost/MyMvcApp/) 时,出现 HTTP 403 错误。当我直接进入其中一个子页面 ( http://localhost/MyMvcApp/Home/) 时,我收到一个 HTTP 404。

So I guess for some reason the URL routing isn't working. I've already added UrlRouting as a module and a handler to the web.config. In my searches this is offered as a solution for some similair problems. But for me this still doesn't work.

所以我猜出于某种原因,URL 路由不起作用。我已经将 UrlRouting 作为模块和处理程序添加到 web.config。在我的搜索中,这是作为一些类似问题的解决方案提供的。但对我来说这仍然不起作用。

The interesting part of my web.config looke like this:

我的 web.config 有趣的部分看起来像这样:

<system.web>
  <compilation debug="true" targetFramework="4.0">
    <assemblies>
      <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </assemblies>
  </compilation>
  <authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="2880" />
  </authentication>
  <membership>
    <providers>
      <clear />
      <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
    </providers>
  </membership>
  <profile>
    <providers>
      <clear />
      <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
    </providers>
  </profile>
  <roleManager enabled="false">
    <providers>
      <clear />
      <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
      <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
    </providers>
  </roleManager>
  <pages>
    <namespaces>
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      <add namespace="System.Web.Mvc.Html" />
      <add namespace="System.Web.Routing" />
    </namespaces>
  </pages>
  <httpHandlers>
    <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler" />
  </httpHandlers>
  <customErrors mode="Off" />
</system.web>
<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true" >
    <remove name="UrlRoutingModule"/>
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </modules>
  <handlers>
    <remove name="MvcHttpHandler" />
    <add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler" />
    <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </handlers>
  <httpErrors errorMode="Detailed" />
</system.webServer>

采纳答案by Jeroen-bart Engelen

After more checking and trying I noticed in the "Turn Windows features on or off" dialog that "HTTP Errors" and "HTTP Redirection" were missing. This is strange because as far as I can remember this was installed automatically by the Microsoft Web Platform Installer. In any case "HTTP Redirection" seemed like a need-to-have feature when working with MVC. So after I installed it everything seemed to work perfectly.

经过更多检查和尝试后,我在“打开或关闭 Windows 功能”对话框中注意到缺少“HTTP 错误”和“HTTP 重定向”。这很奇怪,因为据我所知,这是由 Microsoft Web 平台安装程序自动安装的。无论如何,在使用 MVC 时,“HTTP 重定向”似乎是一项必备功能。所以在我安装它之后,一切似乎都运行良好。

回答by Paul

I've just had this problem, and unfortunately the fix here didn't work for me.

我刚刚遇到了这个问题,不幸的是这里的修复对我不起作用。

What did work was running this:

什么工作是运行这个:

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

in a command window...works like a dream now!

在命令窗口中......现在就像做梦一样!

(So, is ASP.Net not installed into IIS by default when you install VS2010?)

(那么,安装 VS2010 时 ASP.Net 是否默认没有安装到 IIS 中?)

回答by Petrus Theron

Add this to your web.configfile:

将此添加到您的web.config文件中:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!-- rest of config -->
</system.webServer>

回答by BritishDeveloper

It is such a pain doing this manually. But definitely doable! I managed it and summed it up in this step by step guide on adding an mvc 2 project to an exisitng web forms solutionhere. Hope this helps... it took me ages to work though all the config settings and there seem to be so few resources on the subject.

手动执行此操作非常痛苦。但绝对可行!我管理它并在此分步指南中对其进行了总结,将 mvc 2 项目添加到此处的现有 Web 表单解决方案中。希望这会有所帮助...虽然所有配置设置都花了我很长时间才能工作,而且关于该主题的资源似乎很少。

回答by Vitaliy Ulantikov

What Helped to me is using classic pipeline for AppPool instead of integrated: alt text

对我有帮助的是对 AppPool 使用经典管道而不是集成: 替代文字

回答by Msam85

Please note that you must run aspnet_regiis.exe -ir as administrator, it seems obvious but when you are tired of trying things with no success to solve that, you could pass it.

请注意,您必须以管理员身份运行 aspnet_regiis.exe -ir,这似乎很明显,但是当您厌倦了尝试但没有成功解决问题时,您可以通过它。

Just to say a big THANK YOU to all the responses, after many hours trying different things, finally I could get work my MVC 2 app in IIS.

只是想对所有的回复说声谢谢,在尝试了很多小时之后,我终于可以在 IIS 中运行我的 MVC 2 应用程序了。

回答by Milton

I was building an MVC2 application on my laptop Windows 7, using .net beta 2 and VS 2010 beta 2. When I installed the entire development environment on Windows Server 2008, including VS, built the solution and ran it, the routing worked fine.

我正在我的笔记本电脑 Windows 7 上构建一个 MVC2 应用程序,使用 .net beta 2 和 VS 2010 beta 2。当我在 Windows Server 2008 上安装整个开发环境(包括 VS),构建解决方案并运行它时,路由工作正常。

The next step was to create a production server on Windows Server 2008, on which I deployed the .net 4.0 beta but none of the other stuff which came with the VS 2010 beta download. Under this configuration the routing never worked until I enable HTTP Redirection as indicated by Jeroen.

下一步是在 Windows Server 2008 上创建一个生产服务器,我在上面部署了 .net 4.0 beta,但没有安装 VS 2010 beta 下载附带的任何其他东西。在此配置下,路由从不工作,直到我启用 Jeroen 指示的 HTTP 重定向。

Hope this helps someone who might be in the same boat.

希望这对可能在同一条船上的人有所帮助。

回答by fordareh

Just wanted to note that I was having the same problem with 403 and 404s but adding the system.webServerand all the elements from the system.web/pages/namespacesnode resolved it for me.

只是想注意我在 403 和 404s 上遇到了同样的问题,但是添加节点中的system.webServer所有元素system.web/pages/namespaces为我解决了这个问题。