2012-07-05 13 views
8

Ho un semplice ASP.NET MVC 3 sito ospitato in IIS 7.0 e sto avendo difficoltà nella visualizzazione di una pagina di errore personalizzata http per un codice di stato HTTP 404.13.configurazione di IIS per errore 404.13 personalizzato

Ho la seguente configurazione nel mio Web.Config

<system.web> 
    <httpRuntime maxRequestLength="2048"/> 
    <customErrors mode="Off"/> 
</system.web> 

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
     <clear/> 
     <error statusCode="404" subStatusCode="-1" path="/home/showerror" responseMode="ExecuteURL" /> 
     <error statusCode="404" subStatusCode="13" path="/home/showerror" responseMode="ExecuteURL" /> 
    </httpErrors> 
    <security> 
     <requestFiltering> 
      <requestLimits maxAllowedContentLength="1048576"/> 
     </requestFiltering> 
    </security> 
</system.webServer> 

Se navigando a una pagina che non esiste la mia pagina di errore è reso correttamente. Tuttavia, se carico un file superiore a 1 MB, mi viene presentata una risposta 404 vuota. L'url non viene mai eseguito. Se cambio il codice di risposta a Redirect, l'utente viene reindirizzato correttamente.

+0

possibile duplicato del [pagina di errore personalizzata di visualizzazione quando il caricamento file supera permesso dimensioni in ASP.NET MVC] (http://stackoverflow.com/questions/2759193/display-custom-error-page-when-file -upload-supera-consentito-size-in-asp-net-mvc) –

+1

@DarinDimitrov Quella domanda utilizza responseMode = Redirect, è un problema diverso, non è un duplicato. –

+1

Utilizza il reindirizzamento perché ExecuteURL non funziona con 404.13 come spiegato nella risposta duplicata. –

risposta

3

L'errore personalizzato non viene visualizzato molto probabilmente a causa della funzione di blocco del sistema di configurazione. Provate il seguente comando per sbloccarlo:

%windir%\System32\inetsrv\appcmd unlock config -section:system.webserver/httperrors 

Dopo un paio di giorni di giocare con RequestFilters e le pagine CustomError, finalmente ha funzionato per me.

1

Ho avuto lo stesso problema con IIS 7.5 in modalità integrata.

Alla fine ho rinunciato a gestire l'errore nel metodo web.config e si è trasferito il rilevamento degli errori e la gestione al Application_EndRequest invece:

Aggiungere il seguente al file Global.asax:

Se non si dispone di un global.asax (MVC), è possibile aggiungerlo invece all'errore di pagina.

Protected Sub Application_EndRequest(ByVal sender As Object, ByVal e As System.EventArgs) 

    Dim context As HttpContext = HttpContext.Current.ApplicationInstance.Context 
    If Not IsNothing(context) Then 

     If context.Response.StatusCode = 404 And 
      context.Response.SubStatusCode = 13 Then 

       context.Response.ClearHeaders() 
       context.Server.Transfer("~/errors/404.13.aspx", False) 
     End If 

    End If 
End Sub 
+0

Questa soluzione non funziona per me in MVC. Genera l'eccezione "Errore nell'esecuzione della richiesta figlio per ...". Se provo a utilizzare Response.Redirect, viene generata la "Lunghezza massima richiesta superata". eccezione. –

Problemi correlati