requestValidationMode 导致 ValidateRequest=False 失效或者ASP.NET 4.0事件消息: 发生了验证错误;检测到有潜在危险的Request.Form值

解决方案: web.config 中httpRuntime 的requestValidationMode属性更改为‘2.0’ ;

<httpRuntime requestValidationMode="2.0" />

例如:

先看如下 web.config 的代码:

<system.web>

<compilation debug="true" targetFramework="4.0"/>

<httpRuntime requestValidationMode="2.0" />

<pages validateRequest="false"></pages>

</system.web>

validateRequest 这句我们知道是关闭验证,也就是说提交带标签,比如 <strong>粗体</strong> 这样的值时,ASP.NET 不会报错。

但在 4.0 中还多了一个 requestValidationMode,这是什么意思呢?

requestValidationMode 有两个值:

?2.0仅对网页启用请求验证。是启用还是关闭取决于 validateRequest。

?4.0 默认值。任何 HTTP 请求都会启用请求验证,也就是说不光是网页,还包括 Cookie 等。此时强制启用,不管 validateRequest 为何值。

由于 requestValidationMode="4.0" 是强制启用,所以我们会发现在 .NET Framework 4.0 中仅靠设置 validateRequest 是关闭不了请求验证的,还得将 requestValidationMode 设置为 2.0。