继续昨天的问题“检测到有潜在危险的 Request.Form 值”,前面说如果不想取消数据验证那怎么避免这个问题。
既然是数据验证到危险值然后报错那么我们可不可以在验证的中间做一个处理让他不报错,比如转义掉危险字符(例如将“<”用“Replace()”替换成A然后在接受数据后替换回来,当然这是比较笨的办法。另外不知HTMLEncode这个方法是否可用,我没试过。)
还有一种处理方式就是在报错页面添加Page_Error()函数,然后在这个函数里面处理报错信息。
1 protected void Page_Error(object sender, EventArgs e) 2 { 3 Exception ex = Server.GetLastError(); 4 if (ex is HttpRequestValidationException) 5 { 6 Response.Write("请您输入合法字符串。"); 7 Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()。 8 } 9 }
这样程序就能截取HttpRequestValidationException信息,然后可以按照你个人意愿处理信息也可以不处理。
总结:总结一下上面关于“检测到有潜在危险的 Request.Form 值”这个问题的解决方式吧。
1)在页面Page指令添加validateRequest="false"
2)在webconfig添加<pages validateRequest="false" /> (关于两者区别前面说过包括注意<httpRuntime requestValidationMode="2.0" />)
3)转义掉危险字符(一、用Replace()替换。二、HTMLEncode()转义)
4)报错页面添加Page_Error()函数。(推荐第四种)
个人的小结:其实这个问题我已经遇到不下五六次了但是我还是没能想起来上一次是怎么解决的,总结个人的原因一个是记忆不足主要原因还是没有深入去理解这个问题的根本原因以及这个验证的由来。现在发现以后解决问题不能只是解决就行要认识本质这样加深理解。
最后感谢这位博主 http://hi.baidu.com/iaskall/item/54ace6bb3af926d384dd79c4