Вопрос

Недавно я скачал бета-версию 2 VS2010 и начал играть с ASP.NET MVC2.Первоначальная разработка была выполнена с помощью Casini, но теперь я хотел запустить приложение из IIS 7.5 (я использую Windows 7).Я установил совместимость с метабазой IIS6 и запускаю VS2010 от имени администратора, чтобы я мог использовать кнопку "Создать виртуальный каталог" на вкладке "Веб" настроек проекта.Это создало запись веб-приложения в IIS, но оно не работает.

Когда я перехожу на главную страницу (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>
Это было полезно?

Решение 2

После дополнительной проверки и попыток я заметил в диалоговом окне "Включить или выключить функции Windows", что "Ошибки HTTP" и "Перенаправление HTTP" отсутствуют.Это странно, потому что, насколько я помню, это было установлено автоматически установщиком Microsoft Web Platform.В любом случае "Перенаправление HTTP" казалось необходимой функцией при работе с MVC.Так что после того, как я установил его, все, казалось, работало идеально.

Другие советы

У меня только что возникла эта проблема, и, к сожалению, исправление здесь у меня не сработало.

Что действительно работало, так это запуск этого:

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

в командном окне ... теперь все работает как во сне!

(Итак, ASP.Net не установлен в IIS по умолчанию при установке VS2010?)

Добавьте это в свой web.config файл:

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

Делать это вручную - такая мука.Но определенно выполнимо!Мне это удалось, и я подвел итог в этом пошаговом руководстве по добавление проекта mvc 2 в существующее решение web forms вот.Надеюсь, это поможет...мне потребовалась целая вечность, чтобы поработать со всеми настройками конфигурации, и, похоже, ресурсов по этому вопросу так мало.

Пожалуйста, обратите внимание, что вы должны запустить aspnet_regiis.exe -ir от имени администратора, это кажется очевидным, но когда вы устанете безуспешно пытаться решить эту проблему, вы можете передать ее.

Просто чтобы сказать большое СПАСИБО всем ответам, после многих часов попыток разных вещей, наконец, я смог заставить работать мое приложение MVC 2 в IIS.

Что мне помогло, так это использование классического конвейера для AppPool вместо интегрированного:alt text

Я создавал приложение MVC2 на своем ноутбуке Windows 7, используя .net beta 2 и VS 2010 beta 2.Когда я установил всю среду разработки на Windows Server 2008, включая VS, создал решение и запустил его, маршрутизация работала нормально.

Следующим шагом было создание производственного сервера на Windows Server 2008, на котором я развернул бета-версию .net 4.0, но ничего другого из того, что поставлялось с загрузкой бета-версии VS 2010, не было.При такой конфигурации маршрутизация никогда не работала, пока я не включу перенаправление HTTP, как указано Джеруном.

Надеюсь, это поможет кому-то, кто может оказаться в той же лодке.

Просто хотел отметить, что у меня была такая же проблема с 403 и 404, но добавление system.webServer и все элементы из system.web/pages/namespaces узел решил это за меня.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top