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

时间:2009-12-05 13:53:01

标签: asp.net-mvc visual-studio-2010-beta-2 iis-7.5

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

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

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

我的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>

8 个答案:

答案 0 :(得分:49)

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

运作的是什么:

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

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

(因此,安装VS2010时默认情况下ASP.Net是否未安装到IIS中?)

答案 1 :(得分:26)

经过更多检查和尝试后,我在“打开或关闭Windows功能”对话框中注意到“HTTP错误”和“HTTP重定向”丢失了。 这很奇怪,因为据我所知,这是由Microsoft Web Platform Installer自动安装的。 在任何情况下,“HTTP重定向”在使用MVC时似乎都是需要的功能。所以在我安装之后,一切似乎都很完美。

答案 2 :(得分:5)

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

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

答案 3 :(得分:2)

手动这样做很痛苦。但绝对可行!我管理了它并在adding an mvc 2 project to an exisitng web forms solution这里的分步指南中总结了它。希望这会有所帮助......虽然所有的配置设置都花了我很多时间,但这个主题的资源似乎很少。

答案 4 :(得分:1)

帮助我的是使用AppPool的经典管道而不是集成: alt text http://img823.imageshack.us/img823/3684/20100612135212.png

答案 5 :(得分:1)

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

只要对所有回复表示非常感谢,经过多个小时尝试不同的事情,最后我可以在IIS中使用我的MVC 2应用程序。

答案 6 :(得分:0)

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

下一步是在Windows Server 2008上创建一个生产服务器,我在其上部署了.net 4.0 beta,但没有配备VS 2010 beta下载的其他内容。 在此配置下,路由从未工作,直到我启用Jeroen指示的HTTP重定向。

希望这可以帮助那些可能在同一条船上的人。

答案 7 :(得分:0)

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