这两天作项目的时候偶然发现项目中的保存功能的时候出现这样的异常:异常详细信息: System.Web.HttpRequestValidationException: 从客户端(XXXX)中检测到有潜在危险的 Request.Form 值。通过查询调试发现,保存的文本中存在回车符,<br/>标签做为参数的值的一部分传到后台了,被后台检测出有潜在的风险。web
首先的想法就是在请求后台以前把参数处理成不含<br/>标签的形式,前台保存取值的时候用的是prototype中的form.serialize()的方法,传的时候时已经编码过的值,可是不知道为何用new Ajax.Request请求后台是时候,仍是包含<br/>的标签,从而致使了该异常的出现,改为jQuery的form.serialize()的方法取得值和prototype取得值是一致的,用jQuery.Ajax请求的时候就没有这个问题,这样把prototype有关的代码都改为jQuery问题得以解决,可是目前的这个项目大部分都是用prototype作的,换起来比较麻烦,因此必须寻找一个其余的方法来处理这个问题。(之后有时间会查一下prototype为何会出现这样的问题,你们有知道的欢迎交流学习)安全
asp.net能够禁用这些风险的验证 具体的作法是:在配置文件webconfig中增长 <httpRuntime requestValidationMode="2.0" />和 <pages validateRequest="false" />两个配置(<system.web>这个配置下),用于禁用请求验证,这样异常得以解决,可是这样会方法会很不安全,若是对用户输入的信息安全性没有要求的话能够采用。
asp.net
目前还有没有找到更好的方法来解决这个问题,暂时使用的是第二个方法,你们有什么好的方法欢迎来和我交流。学习