同样的问题又一次遇到了,还是那个原则,第一次遇到可以挂起来,可是第二次又遇到它,说明这个问题很重要,必须解决。
在界面上提交带有Html标记的文本时,如果不经过处理,就会报出这样的错误。针对这个错误,网上大概有这么几种解决方法:
1. 解决方案一:
在.aspx文件头中加入这句:
<%@ Page validateRequest="false" %>
2. 解决方案二:
修改web.config文件:
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
因为validateRequest默认值为true。只要设为false即可。
3.解决方案三:
截获 HttpRequestValidationException 异常。这种解决方案倡导者认为,直接将validateRequest的值设置false会给网站带来安全隐患。我们应该主动去截获这些特殊的标记,提示用户去修改。
但这样也有缺点,就是这些被定义的标记字符对于用户来说就是不可用的。同时,我们不可能把所有的HTML标记都屏蔽,所以,还得根据实际情况斟酌一下!
详细方法请见:连接
4.解决方法四:
之所以有解决方案四,是因为我这个人比较懒,同时第一第二在我这没有起效果。
为什么在网上大家都使用的方法在我这里不起作用?
requestValidationMode,这个在.netframework4.0中出现的属性在作怪!
requestValidationMode 有两个值:
2.0仅对网页启用请求验证。是启用还是关闭取决于 validateRequest。
4.0 默认值。任何 HTTP 请求都会启用请求验证,也就是说不光是网页,还包括 Cookie 等。此时强制启用,不管 validateRequest 为何值。
由于 requestValidationMode="4.0" 是强制启用,所以我们会发现在 .NET Framework 4.0 中仅靠设置 validateRequest 是关闭不了请求验证的,还得将 requestValidationMode 设置为 2.0。
这就是为什么我使用上述两个方法都不起作用的原因。
所以,最终我使用的解决方案就是:(提示,这种方法仅供练习,存在安全问题!)
在webconfig中将requestValidationMode设置为2.0.然后在配合解决方案一,就完美啦!
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>