Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不将RequestValidationMode设置为2.0的情况下禁用请求验证?_C#_.net_Asp.net_Request Validation_Requestvalidationmode - Fatal编程技术网

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

C# 如何在不将RequestValidationMode设置为2.0的情况下禁用请求验证?,c#,.net,asp.net,request-validation,requestvalidationmode,C#,.net,Asp.net,Request Validation,Requestvalidationmode,我们刚刚升级到ASP.NET 4.0,发现requestValidation不再有效。MSDN文档建议我们需要将web.config设置为2.0: 4.0(默认设置)。HttpRequest对象在内部设置一个标志,指示在任何时候都应触发请求验证 访问任何HTTP请求数据。这保证了请求 验证是在cookie和URL等数据被删除之前触发的 在请求期间访问。的请求验证设置 配置文件或@Page的pages元素(如果有) 忽略单个页面中的指令 2.0。请求验证仅对页面启用,而不是对所有HTTP请求启用

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

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

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

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

<%@ Page ValidateRequest="false" %>

对于requestValidationMode 4.0中的页面,似乎无法打开或关闭此选项

这概述了.NET4.0中的突破性变化,这似乎是其中之一。甚至白皮书也建议恢复到RequestValidationMode2.0

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

虽然它也有益地建议

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


在不提供任何关于如何最好地解决这些问题的指导的情况下,您最好的选择是使用自己的代码覆盖requestValidationType:


link

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

您可以为要禁用请求验证的页面装箱一个子目录,并在RequestValidationMode设置为2.0的情况下向该目录添加一个新的web.config,这样,只有该目录才能在2.0模式下工作,而不会影响在4.0模式下工作的所有其他请求

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

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


希望它能像帮助我一样帮助你

@James Johnson感谢您正确格式化我的答案(看起来像代码而不是文本)@Stilgar:在您询问我之后,了解实际问题所在,谢谢:(如上所述,这不起作用:(在v4中,“页面元素的请求验证设置(如果有))在配置文件中或在单个页面中忽略@Page指令的“非常好,谢谢。我学到了一些东西:位置作为同级添加到下。路径属性值不能以前缀/”开头。可以添加单个页面或整个文件夹(不要使用尾随/)我不得不在我的MVC应用程序中使用这种技术。我有一个第三方控制器,需要接收HTML作为参数,而这里的其他答案不起作用。谢谢ScottRFrost。由于提出了这个问题,现在有一个“4.5”选项,默认选项,描述为“在这种模式下,值是延迟加载的,也就是说,在被请求之前不会读取它们。”我对此进行了测试,它似乎既尊重@Page ValidateRequest指令,也尊重控制级ValidateRequestMode。@user0474975您应该将此作为答案发布:)