2009-04-01 5 views
16

У меня есть приложение mvc, разработанное и протестированное с Cassini. Развернуто на моем сайте в GoDaddy, и страница по умолчанию подходит. Нажмите, чтобы войти в систему, и я получаю 404.Диагностика ошибок 404 в IIS 7 и ASP.NET MVC

Я бегу под 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" } 
     ); 

Любая идея, что может произойти или как я могу устранить эту проблему?

ответ

27

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

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

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

+0

Спасибо, Мехридад. Оказывается, что GoDaddy по умолчанию использует IIS 7 в классическом режиме. – Stuart

+3

12

Пробовал все, мне нужно было установить мою сетевую конфигурацию, как это, чтобы она работала.

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
+0

Это сработало, спасибо! – SirMoreno

+2

Ничего себе, это действительно сработало! Но почему у меня такое чувство, что оно вернется, чтобы преследовать меня? – Lopsided

+0

@ Lopside Сделайте это вместо этого. http://stackoverflow.com/a/23618629/385565 – DavidAndroidDev

22

Don't use 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> 
+0

Этот ответ также работал и, кажется, имеет более эффективный (и элегантный) подход. – Lopsided

+2

Этот метод работал хорошо для меня в приложении ASP.NET Web API. Приложение было оштрафовано локально, но когда оно было развернуто в любой другой среде, я просто получил 404 для любого запроса веб-API. Добавлены биты модуля маршрутизации, отмеченные выше, и все в порядке. Аналогичный вопрос здесь: http://stackoverflow.com/questions/15389855/asp-net-web-api-application-gives-404-when-deployed-at-iis-7. Благодаря! –

+0

Я вытягивал свои волосы, пытаясь получить приложение MVC для приема запросов HTTP DELETE. Это позаботилось обо мне. Благодаря! – Furynation

1

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

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