26

我最近下载了 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>
4

8 回答 8

49

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

什么工作是这样运行的:

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

在命令窗口中......现在像梦一样工作!

(那么,安装VS2010时,ASP.Net是不是默认安装到IIS中的?)

于 2010-05-26T12:45:01.040 回答
26

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

于 2009-12-06T23:07:52.143 回答
5

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

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!-- rest of config -->
</system.webServer>
于 2012-12-09T11:36:49.387 回答
2

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

于 2010-05-27T12:29:47.167 回答
1

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

于 2010-06-12T10:54:22.203 回答
1

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

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

于 2011-03-22T13:44:29.777 回答
0

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

下一步是在 Windows Server 2008 上创建一个生产服务器,我在其上部署了 .net 4.0 测试版,但没有安装 VS 2010 测试版下载附带的其他东西。在这种配置下,直到我按照 Jeroen 的指示启用 HTTP 重定向,路由才起作用。

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

于 2010-02-16T17:07:32.280 回答
0

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

于 2010-06-21T09:07:39.847 回答