2012-02-29 50 views
7

當我使用非授權字符(例如*)調用頁面時,出現一個黃頁「檢測到潛在危險的Request.Path值」。 它看起來像是一個400錯誤頁面。 我的目標是定製此頁面並顯示一個乾淨的錯誤頁面或重定向到主頁(我嘗試了兩種解決方案)。 以下是我在我的web.config中寫道:自定義「檢測到潛在危險的Request.Path值」錯誤頁面

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

我使用的IIS7。 重點是我的400頁仍然顯示爲黃色錯誤頁面。

必須有一個解決方法,因爲雖然堆棧交易所數據瀏覽器有這個問題,http://data.stackexchange.com/users&nbsp堆棧溢出本身並不:https://stackoverflow.com/users&nbsp

任何想法?

+0

你看到可以用自定義錯誤頁通過修改應用程序的配置標記的「defaultRedirect」屬性,點被替換的當前錯誤頁到自定義錯誤頁面的URL。這對你沒有幫助? – gbianchi 2012-04-11 17:09:23

+0

如果你使用的是IIS7 +,這裏有一個更簡單的解決方案: - http://stackoverflow.com/questions/30071341/asp-net-mvc-customerror-page-doesnt-get-displayed-for-some-of-the- 400錯誤/ 30072933#30072933 – 2015-05-06 09:40:44

回答

8

正如gbianchi提到的,​​你可以做一個customErrors重定向這樣的:

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

然而,這將導致與原來的路徑和段一個惱人的查詢字符串。

如果它是一個ASP.NET應用程序,您可以重載Global.asax.cs文件中的Application_Error事件。下面是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); 
    } 
} 
相關問題