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

时间:2011-10-12 13:36:50

标签: c# .net asp.net request-validation requestvalidationmode

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

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

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

4 个答案:

答案 0 :(得分:26)

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

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

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

<location path="Admin/Translation.aspx">
    <system.web>
        <httpRuntime requestValidationMode="2.0"/>
    </system.web>
</location>

希望它可以帮助你帮助我!

答案 1 :(得分:4)

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

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

MSDN链接

答案 2 :(得分:3)

似乎无法为requestValidationMode 4.0中的页面打开或关闭此功能。

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

  

要恢复到ASP.NET 2.0请求验证功能的行为,请在Web.config文件中添加以下设置:

     

<httpRuntime requestValidationMode="2.0" />

虽然它也有助于推荐

  

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

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

答案 3 :(得分:-3)

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

<%@ Page ValidateRequest="false" %>