2012-02-29 6 views
7

Kiedy wywołuję stronę z nieautoryzowanym znakiem (takim jak *), otrzymuję żółtą stronę "Wykryto potencjalnie niebezpieczną wartość Request.Path". Wygląda na to, że jest to strona błędu 400. Moim celem jest dostosowanie tej strony i wyświetlenie strony z czystym błędem lub przekierowanie do strony głównej (próbowałem obu rozwiązań). Oto co napisałem w moim web.config:Dostosowywanie "Potencjalnie niebezpieczna wartość Request.Path została wykryta" strona błędu

<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> 

Używam IIS7. Punkt jest mój 400 strona jest nadal wyświetlany jako żółty błąd strony.

Musi być obejście tego problemu, bo chociaż Stos wymiany danych Explorer ma problem z http://data.stackexchange.com/users&nbsp przepełnienie stosu sama nie: https://stackoverflow.com/users&nbsp

pomysłów?

+0

Obecna strona błędu widzisz może być zastąpiony przez niestandardowej strony błędu przez zmodyfikowanie „defaultRedirect” atrybut tagu konfiguracyjnym aplikacji wskazać do niestandardowego adresu URL strony błędu. to ci nie pomaga? – gbianchi

+0

Jeśli używasz IIS7 +, istnieje prostsze rozwiązanie tutaj: - http://stackoverflow.com/questions/30071341/asp-net-mvc-customerror-page-doesnt-get-displayed-for-some-of-the- 400-błędy/30072933 # 30072933 –

Odpowiedz

8

Jak gbianchi wspomniano, można zrobić customErrors przekierować tak:

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

Jednak spowoduje to irytujące kwerendy z oryginalnej ścieżki i segmentu.

Jeśli jest to aplikacja ASP.NET, można przeładować zdarzenie Application_Error w pliku Global.asax.cs. Oto hack-owski sposób to zrobić w 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); 
    } 
} 
Powiązane problemy