2009-04-01 14 views
16

Mam aplikację mvc opracowaną i przetestowaną z Cassini. Wdrożone do mojej witryny w GoDaddy, a domyślna strona pojawia się dobrze. Kliknij, aby się zalogować i otrzymuję numer 404.Diagnozowanie błędów 404 w IIS 7 i ASP.NET MVC

Używam go w IIS 7, więc jest to nieoczekiwane. Moje trasy są dość proste:

 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" } 
     ); 

Czy wiesz, co może się przydarzyć lub jak rozwiązać ten problem?

Odpowiedz

27

Czy używasz zintegrowanego trybu IIS7 ?

Tryb klasyczny IIS7 ma nie automatycznie mapować adresy URL bez rozszerzenia do ASP.NET (podobnie jak IIS6).

Upewnij się również, że twój znacznik Web.config<system.webServer> jest poprawnie skonfigurowany.

+0

Dzięki, Mehrdad. Okazuje się, że GoDaddy domyślnie IIS 7 przechodzi w tryb klasyczny. – Stuart

+3

12

Próbowałem wszystkiego, musiałem ustawić moją konfigurację internetową w ten sposób, aby działało.

+0

Udało się, dziękuję !!! – SirMoreno

+2

Wow, to zadziałało! Ale dlaczego mam wrażenie, że wróci mnie prześladować? – Lopsided

+0

@Lopsided Zrób to zamiast tego. http://stackoverflow.com/a/23618629/385565 – DavidAndroidDev

22

Don't use runAllManagedModulesForAllRequests. Chcesz, aby usługi IIS obsługiwały zasoby, takie jak obrazy.

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

Zamiast dodać moduł routingu MVC

<system.webServer> 
    <modules> 
    <remove name="UrlRoutingModule-4.0" /> 
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> 
    </modules> 
</system.webServer> 
+0

Ta odpowiedź również zadziałała i wydaje się, że ma bardziej wydajne (i eleganckie) podejście. – Lopsided

+2

Ta metoda działa dobrze dla mnie w aplikacji ASP.NET Web API. Aplikacja działała na miejscu, ale po wdrożeniu w innym środowisku otrzymałem 404 dla dowolnego żądania Web API. Dodano bity modułu routingu wymienione powyżej i wszystko jest w porządku. Podobny problem tutaj: http://stackoverflow.com/questions/15389855/asp-net-web-api-application-gives-404-when-deployed-at-is-7. Dzięki! –

+0

Wyciągałem włosy, próbując pobrać aplikację MVC, aby zaakceptować żądania HTTP DELETE. Troszczyłem się o to dla mnie. Dzięki! – Furynation

1

miałem ten sam problem, upload sterownika, web.config i innych klas, ale zapomniałem przesłać folder bin.

Po załadowaniu folderu bin zadziałało!

Powiązane problemy