2015-04-18 10 views
5

Ho impostato una pagina di errore personalizzata 404 Not Found utilizzando la sezione httpErrors nel mio file Web.config.Come rimuovere la stringa di query da 404 Errori non trovati in ASP.NET MVC

<httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404"/> 
    <error statusCode="404" responseMode="ExecuteURL" path="/error/notfound"/> 
</httpErrors>         

Se navigando ad una pagina inesistente, ottengo il seguente URL:

http://localhost/error/notfound?404;http://localhost/ThisPageDoesNotExist/

non voglio la stringa di query nell'URL e io don Non voglio neanche reindirizzare 301 o 302 alla pagina non trovata. Come posso raggiungere questo obiettivo? Usando forse la riscrittura dell'URL?

+0

Provare a cambiare la responseMode in 'Redirect' invece di ExecuteURL. –

+0

Ciò causa un reindirizzamento. Preferisco una riscrittura eseguita da ExecuteURL. –

risposta

3

Se ho capito bene, si desidera gestire errori Not Found gestite senza ri-scrivere l'url e semplicemente restituendo una visione risultato

Un modo per raggiungere questo obiettivo è quello di utilizzare il vecchio customErrors ma con redirectMode="ResponseRewrite" per assicurarsi che l'URL originale non venga modificato.

<customErrors mode="On" redirectMode="ResponseRewrite"> 
    <error statusCode="404" redirect="~/NotFound" /> 
    </customErrors> 

L'altro è quello di utilizzare il metodo httpErrors con existingResponse="Replace"Esattamente il modo in cui si sta currenly utilizza

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
     <clear/> 
     <error statusCode="404" path="/Errors/NotFound.html" responseMode="ExecuteURL"/> 
    </httpErrors> 
    </system.webServer> 

ho cercato di ricreare il problema ed è riuscito solo quando ho avuto entrambi httpErrors e customErrors set senzaredirectMode="ResponseRewrite"

Le mie conclusioni: probabilmente stai usando customErrors senza ResponseRewrite che ha la precedenza sul gestore httpErrors.

0

Se si specifica la propria querystring quando si specifica il percorso, .NET NON affronterà lo aspxerrorpath.

Ad esempio:

<customErrors mode="On" defaultRedirect="errorpage.aspx?error=1" > 

Si potrebbe anche creare un HttpHandler che cattura gli URL con aspxerrorpath in essa, e lo priva. Probabilmente potresti fare lo stesso anche con il modulo di riscrittura in IIS7.

Oppure, nello global.asax, rilevare l'errore 404 e reindirizzare alla pagina del file non trovata. Esempio:

void Application_Error(object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 
    if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 404) 
    { 
     Response.Redirect("~/filenotfound.aspx"); 
    } 
    else 
    { 
     // your global error handling here! 
    } 
} 
+0

È ancora piuttosto brutto. –

+0

Vedere la mia risposta aggiornata per favore –

Problemi correlati