2012-02-29 69 views
7

Khi tôi gọi một trang có ký tự không được ủy quyền (như *), tôi nhận được trang màu vàng "Đã phát hiện giá trị Request.Path nguy hiểm tiềm ẩn". Dường như đây là trang lỗi 400. Mục tiêu của tôi là tùy chỉnh trang này và hiển thị trang lỗi hoặc chuyển hướng đến trang chủ (tôi đã thử cả hai giải pháp). Đây là những gì tôi đã viết trong web.config của tôi:Tùy chỉnh "Trang giá trị Request.Path nguy hiểm tiềm ẩn đã được phát hiện" trang

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

Tôi đang sử dụng IIS7. Vấn đề là trang 400 của tôi vẫn được hiển thị dưới dạng trang lỗi màu vàng.

Phải có một cách giải quyết bởi vì mặc dù Stack Trao Đổi Dữ Liệu Explorer có vấn đề này với http://data.stackexchange.com/users&nbsp Stack Overflow bản thân không: https://stackoverflow.com/users&nbsp

Bất kỳ ý tưởng?

+0

Trang lỗi hiện tại bạn có thể được thay thế bằng trang lỗi tùy chỉnh bằng cách sửa đổi thuộc tính "defaultRedirect" của thẻ của ứng dụng thành điểm vào URL trang lỗi tùy chỉnh. điều này không giúp bạn? – gbianchi

+0

Nếu bạn đang sử dụng IIS7 + có một giải pháp đơn giản hơn ở đây: - http://stackoverflow.com/questions/30071341/asp-net-mvc-customerror-page-doesnt-get-displayed-for-some-of-the- 400 lỗi/30072933 # 30072933 –

Trả lời

8

Như gbianchi đề cập, bạn có thể làm một customErrors chuyển hướng như thế này:

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

Tuy nhiên, điều này sẽ dẫn đến một chuỗi truy vấn gây phiền nhiễu với đường dẫn gốc và phân khúc.

Nếu đó là ứng dụng ASP.NET, bạn có thể quá tải sự kiện Application_Error trong tệp Global.asax.cs của mình. Đây là cách hack-ish để thực hiện nó trong 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); 
    } 
} 
Các vấn đề liên quan