2009-04-01 4 views
16

Ho un'app per mvc sviluppata e testata con Cassini. Distribuito sul mio sito su GoDaddy, e la pagina predefinita si presenta bene. Fare clic per accedere, e ottengo un 404.Diagnosi di 404 errori su IIS 7 e ASP.NET MVC

Sono in esecuzione in IIS 7 lì, quindi questo è inaspettato. I miei percorsi sono piuttosto semplici:

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

Qualche idea su cosa potrebbe succedere o su come posso risolvere questo problema?

risposta

27

Sei in esecuzione in IIS7 modalità integrata?

La modalità classica di IIS7 fa non mappa automaticamente gli URL senza estensione su ASP.NET (molto simile a IIS6).

Assicurati anche che il tuo tag Web.config<system.webServer> sia configurato correttamente.

+0

Grazie, Mehrdad. Risulta che GoDaddy imposta automaticamente IIS 7 sulla modalità classica. – Stuart

+3

12

Ho provato tutto, ho dovuto impostare la mia configurazione web in questo modo, per farlo funzionare.

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

Ha funzionato, grazie !!! – SirMoreno

+2

Wow, questo ha funzionato davvero! Ma perché ho la sensazione che tornerà a tormentarmi? – Lopsided

+0

@Sloppiato Effettua invece questa operazione. http://stackoverflow.com/a/23618629/385565 – DavidAndroidDev

22

Don't use runAllManagedModulesForAllRequests. Si desidera consentire a IIS di gestire risorse come le immagini.

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

invece aggiungere il modulo di routing MVC

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

Anche questa risposta ha funzionato e sembra avere un approccio più efficiente (ed elegante). – Lopsided

+2

Questo metodo ha funzionato bene per me in un'applicazione API Web ASP.NET. L'app ha funzionato a livello locale, ma quando è stata distribuita in qualsiasi altro ambiente, ho appena ricevuto un 404 per qualsiasi richiesta API Web. Aggiunti i bit del modulo di routing sopra riportati e tutto è a posto. Problema simile qui: http://stackoverflow.com/questions/15389855/asp-net-web-api-application-gives-404-when-deployed-at-iis-7. Grazie! –

+0

Mi stavo strappando i capelli cercando di ottenere un'app MVC per accettare richieste DELETE HTTP. Questo si è preso cura di me per me. Grazie! – Furynation

1

Ho avuto lo stesso problema, ho caricato il controller, web.config e le altre classi, ma ho dimenticato di caricare la cartella bin.

Dopo aver caricato la cartella bin, ha funzionato!