2012-02-29 15 views
7

Quando chiamo una pagina con un carattere non autorizzato (come *), ottengo una pagina gialla "È stato rilevato un valore Request.Path potenzialmente pericoloso". Sembra che sia una pagina di errore 400. Il mio obiettivo è personalizzare questa pagina e mostrare una pagina di errore pulita o reindirizzare alla home page (ho provato entrambe le soluzioni). Ecco quello che ho scritto nel mio web.config:Personalizzazione "È stato rilevato un valore Request.Path potenzialmente pericoloso" pagina di errore

<system.webServer> 
<httpErrors errorMode="Custom"> 
    <remove statusCode="400" subStatusCode="-1" /> 
    <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="400" path="/page-non-trouvee.aspx?status=400" responseMode="ExecuteURL" /> 
    <error statusCode="404" path="/" responseMode="ExecuteURL" /> 
</httpErrors> 

sto usando IIS7. Il punto è che la mia pagina 400 viene ancora visualizzata come una pagina di errore gialla.

Ci deve essere una soluzione perché anche se il Data Explorer Stack Exchange dispone di questo problema con http://data.stackexchange.com/users&nbsp overflow dello stack se stessa non è: https://stackoverflow.com/users&nbsp

Tutte le idee?

+0

La pagina di errore corrente che state vedendo può essere sostituito da una pagina di errore personalizzata modificando l'attributo "defaultRedirect" del tag configurazione dell'applicazione al punto a un URL della pagina di errore personalizzato. questo non ti aiuta? – gbianchi

+0

Se stai usando IIS7 +, qui c'è una soluzione più semplice: http://stackoverflow.com/questions/30071341/asp-net-mvc-customerror-page-doesnt-get-displayed-for-some-of-the- 400-errors/30.072.933 30.072.933 # –

risposta

8

Come gbianchi menzionati, si potrebbe fare un redirect customErrors come questo:

<customErrors mode="On" redirectMode="ResponseRedirect" defaultRedirect="/404" /> 

Tuttavia, ciò si tradurrebbe in una querystring fastidioso con il percorso originale e del segmento.

Se si tratta di un'applicazione ASP.NET, è possibile sovraccaricare l'evento Application_Error nel file Global.asax.cs. Ecco un modo hack-ish di farlo in MVC:

protected void Application_Error() { 
    var exception = Server.GetLastError(); 
    var httpException = exception as HttpException; 
    if (httpException == null) { 
     return; 
    } 

    var statusCode = httpException.GetHttpCode(); 
    // HACK to get around the Request.Path errors from invalid characters 
    if ((statusCode == 404) || ((statusCode == 400) && httpException.Message.Contains("Request.Path"))) { 
     Response.Clear(); 
     Server.ClearError(); 
     var routeData = new RouteData(); 
     routeData.Values["controller"] = "Error"; 
     routeData.Values["exception"] = exception; 
     Response.StatusCode = statusCode; 
     routeData.Values["action"] = "NotFound"; 

     // Avoid IIS7 getting in the middle 
     Response.TrySkipIisCustomErrors = true; 
     IController errorsController = new ErrorController(); 
     HttpContextWrapper wrapper = new HttpContextWrapper(Context); 
     var rc = new RequestContext(wrapper, routeData); 
     errorsController.Execute(rc); 
    } 
} 
Problemi correlati