如何在不将RequestValidationMode设置为2.0的情况下禁用请求validation?

我们刚刚升级到ASP.NET 4.0,发现requestValidation不再有效。 MSDN文档建议我们需要将web.config中的requestValidationMode设置为2.0:

  • 4.0(默认值)。 HttpRequest对象在内部设置一个标志,指示每当访问任何HTTP请求数据时都应触发请求validation。 这保证了在请求期间访问诸如cookie和URL之类的数据之前触发请求validation。 将忽略配置文件中页面元素(如果有)或单个页面中@ Page指令的请求validation设置。
  • 2.0。 仅对页面启用请求validation,而不是对所有HTTP请求启用。 此外,配置文件中的pages元素(如果有)或单个页面中的@ Page指令的请求validation设置用于确定要validation的页面请求。

这对我们有用,但我有点困惑。 似乎我们将其置于传统/兼容模式。 当然应该可以有4.0行为,但仍然可以选择在页面上关闭它?

我找到了一种方法来实现这一点,而无需将RequestValidationMode更改为2.0到整个站点:

您可以为要禁用请求validation的页面创建一个子目录,并将一个新的web.config添加到此目录,并将RequestValidationMode设置为2.0,这样只有这个目录才能在2.0模式下工作,而不会影响所有其他请求在4.0模式下工作。

我想你可以在主web.config中添加一个位置部分,只指定一个页面,但我还没有测试过。 像这样的东西:

     

希望它帮助你帮助我!

您最好的选择是使用您自己的代码覆盖requestValidationType:

MSDN链接

似乎无法在requestValidationMode 4.0中为页面打开或关闭此function。

本白皮书概述了.Net 4.0中的重大变化,其中似乎只有一个变化。 即使是白皮书建议还原为requestValidationMode 2.0

若要还原到ASP.NET 2.0请求validationfunction的行为,请在Web.config文件中添加以下设置:

虽然它也有助于推荐

您分析任何请求validation错误,以确定现有处理程序,模块或其他自定义代码是否访问可能是XSS攻击媒介的可能不安全的HTTP输入。

没有就如何最好地解决这些问题提供任何指导

您可以在page指令中将ValidateRequest设置为false:

 <%@ Page ValidateRequest="false" %>