2010-08-24 13 views
8

Buona giornata!Gestione ASP.NET MVC 404 e IIS7 <httpErrors>

Io uso la strategia per gestire errori 404 in questo modo: Error handling for ASP.NET MVC 2 and IIS 7.0 o questo: How can I properly handle 404 in ASP.NET MVC?

In breve: mi occupo di 404 come eccezione nel Global.asax senza l'aggiunta di regole di routing, se l'eccezione è 404 rendo speciale di controllo \ azione con un messaggio di errore.

Su IIS6 funziona con mapping di caratteri jolly ASP.NET. Su IIS7 in modalità integrata ho bisogno di aggiungere quanto segue alla Web.config (dove /error/HttpError404 è la mia azione con pagina 404):

<httpErrors> 
     <remove statusCode="403" subStatusCode="-1" /> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" prefixLanguageFilePath="" path="/error/HttpError404" responseMode="ExecuteURL" /> 
     <error statusCode="403" prefixLanguageFilePath="" path="/error/HttpError403" responseMode="ExecuteURL" /> 
    </httpErrors> 

Perché? Il routing funziona in modo diverso sulla modalità integrata IIS e sulla mappatura dei caratteri jolly IIS6?

Grazie in anticipo!

UPDATE: Secondo le mie prove sembra che il mio movimentazione opere e la mia 404 azione di errore è reso, ma sembra che IIS vede 404 codice di risposta (che ho impostato a livello di codice nel mio 404 azioni) e sostituire la mia pagina con errori di default.

Quando ho impostato <httpErrors> ho ottenuto due hit per la pagina 404: uno dalla gestione delle eccezioni in Global.asax e uno da IIS.

Questa può essere la causa?

risposta

11

Sembra che io abbia risolto impostando in Web.config:

<httpErrors existingResponse="PassThrough" /> 
+0

Ho avuto lo stesso problema per mesi e questo ha funzionato per me. Grazie per l'aggiornamento! –

+0

Sei il benvenuto :) – artvolk

+2

So che è un po 'tardi, ma quello che ha funzionato con me con MVC3 sta usando exisitingResponse = "Sostituisci" –