Диагностика ошибок 404 в IIS 7 и ASP.NET MVC

У меня есть приложение mvc, разработанное и протестированное с помощью Cassini. Развернуто на моем сайте на GoDaddy, и страница по умолчанию отображается нормально. Нажмите, чтобы войти, и я получаю 404.

Я там работаю под IIS 7, так что это неожиданно. Мои маршруты довольно просты:

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",                                              
            "{controller}/{action}/{id}",                           
            new { controller = "Public", action = "Index", id = "" } 
        );
        routes.MapRoute(
            "Report1",
            "Report/{action}/{start}/{end}",
            new { controller = "Report", action = "Index" }
        );
        routes.MapRoute(
            "Report2",
            "Report/{action}/{start}/{end}/{idList}",
            new { controller = "Report", action = "Index" }
        );

Есть идеи, что может происходить или как я могу это устранить?


person Stuart    schedule 01.04.2009    source источник


Ответы (4)


Вы работаете в интегрированном режиме IIS7?

В классическом режиме IIS7 не автоматически сопоставляются URL-адреса без расширений с ASP.NET (как и в IIS6).

Также убедитесь, что ваш тег Web.config <system.webServer> настроен правильно.

person mmx    schedule 01.04.2009
comment
Спасибо, Мердад. Оказывается, GoDaddy по умолчанию использует IIS 7 в классическом режиме. - person Stuart; 01.04.2009
comment
‹System.webServer› ‹модулей runAllManagedModulesForAllRequests = true /› ‹/system.webServer› - person Christopher Edwards; 04.02.2010

Не используйте runAllManagedModulesForAllRequests. Вы хотите, чтобы IIS обрабатывал такие ресурсы, как изображения.

<system.webServer> <!-- Rather do NOT use this -->
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

Вместо этого добавьте модуль маршрутизации MVC

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>
person Chris Herring    schedule 10.05.2013
comment
Этот ответ также сработал и, похоже, имеет более эффективный (и элегантный) подход. - person Lopsided; 13.09.2013
comment
Этот метод хорошо работал у меня в приложении веб-API ASP.NET. Приложение работало локально, но при развертывании в любой другой среде я просто получал 404 для любого запроса веб-API. Добавлены упомянутые выше биты модуля маршрутизации, и все в порядке. Аналогичная проблема здесь: stackoverflow.com/questions/15389855/. Спасибо! - person Adam Weber; 17.10.2013
comment
Я рвал на себе волосы, пытаясь заставить приложение MVC принимать запросы HTTP DELETE. Это позаботилось обо всем за меня. Спасибо! - person Furynation; 17.11.2013
comment
та же проблема, запрос на удаление метода не работает, если я развертываю в другой среде: iis 8 ok, но в другой среде (iis 7) я получаю 404 - person ios_user; 07.09.2016

Все перепробовал, мне пришлось настроить мою веб-конфигурацию вот так, чтобы она работала.

 <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
person Stasevich    schedule 15.02.2011
comment
Вау, это действительно сработало! Но почему у меня такое чувство, что он вернется, чтобы преследовать меня? - person Lopsided; 13.09.2013

У меня была такая же проблема, я загрузил контроллер, web.config и другие классы, но забыл загрузить папку bin.

После того, как я загрузил папку bin, все заработало!

person Cedric Berlanger    schedule 12.12.2013