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

Dan*_*eny 15 .net c# asp.net request-validation requestvalidationmode

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

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

这对我们有用,但我有点困惑.似乎我们将其置于传统/兼容模式.当然应该可以有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>
Run Code Online (Sandbox Code Playgroud)

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

  • 工作完美,谢谢.我学到的一些东西:位置在<configuration>下添加为<system.web>的兄弟.path属性值不能以前缀/开头.可以添加单个页面,也可以添加整个文件夹(不要使用尾随/) (5认同)

Sco*_*ost 5

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

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

MSDN链接


Raj*_*noy -6

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

<%@ Page ValidateRequest="false" %>
Run Code Online (Sandbox Code Playgroud)