對於希望很好的處理這個錯誤信息,而不使用默認ASP.Net異常報錯信息的程序員們,妳們不要禁用validateRequest=false。
正確的做法是在妳當前頁面添加Page_Error()函數,來捕獲所有頁面處理過程中發生的而沒有處理的異常。然後給用戶壹個合法的報錯信息。如果當前頁面沒有Page_Error(),這個異常將會送到Global.asax的Application_Error()來處理,妳也可以在那裏寫通用的異常報錯處理函數。如果兩個地方都沒有寫異常處理函數,才會顯示這個默認的報錯頁面呢。
舉例而言,處理這個異常其實只需要很簡短的壹小段代碼就夠了。在頁面的Code-behind頁面中加入這麽壹段代碼:
以下是引用片段:
protected void Page_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)
{
Response.Write("請您輸入合法字符串。");
Server.ClearError(); // 如果不ClearError()這個異常會繼續傳到Application_Error()。
}
}
這樣這個程序就可以截獲 HttpRequestValidationException 異常,而且可以按照程序員的意願返回壹個合理的報錯信息。
這段代碼很簡單,所以我希望所有不是真的要允許用戶輸入之類字符的朋友,千萬不要隨意的禁止這個安全特性,如果只是需要異常處理,那麽請用類似於上面的代碼來處理即可。
而對於那些通過 明確禁止了這個特性的程序員,自己壹定要明白自己在做什麽,而且壹定要自己手動的檢查必須過濾的字符串,否則妳的站點很容易引發跨站腳本攻擊。