控制级别ValidateRequestMode无效

时间:2014-05-13 14:13:12

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

我正在使用ASP.NET WebForms(.NET 4.5)并具有“内容块”控件,该控件可在许多页面上重复使用。我已经尝试将控件的ValidateRequestMode甚至单个元素设置为“Disabled”,但来自web.config的请求验证仍然会阻止不安全的输入。

有没有解决方法或我做错了什么?

示例:

3 个答案:

答案 0 :(得分:3)

我刚刚在试验和错误的早晨之后解决了具有以下代码的网站的同样问题 - 在WebForms方面,Microsoft关于新请求验证过程的文档似乎是错误的。

在web.config中定位.NET 4.5,如下所示:

<httpRuntime targetFramework="4.5" requestValidationMode="4.5" />

然后将ValidateRequestMode="Disabled"添加到输入控件本身,即:

<asp:textbox id="myControl" runat="server" ValidateRequestMode="Disabled"/>

如果您直接访问POST数据(而不是通过myControl.Text),那么您还需要绕过验证:

Request.Unvalidated.Form("myControl");

答案 1 :(得分:0)

同意Jason Elkin。

作为补充,设置ValidateRequestMode="Disabled"后 在 Control 级别,在服务器端,每当访问请求时,您必须访问 Request.Unvalidated 以获取值。

答案 2 :(得分:0)

此答案将@Jason Elkin的答案扩展到了.NET Framework 4.8,并将其宽松安全性的范围限制为特定目录。如先前报道, ValidateRequestMode="Disabled"本身并不适合我。 did 所做的工作是将以下内容插入我的ASP.NET应用程序项目Web.config文件中:

  <location path="pages/ajax">
    <system.web>
      <!-- enable AJAX -->
      <xhtmlConformance mode="Strict" />
      <!-- this allows HTML content to post back when control's ValidateRequestMode="Disabled" -->
      <httpRuntime targetFramework="4.8" requestValidationMode="4.8" />
    </system.web>
  </location>

其中"pages/ajax"是从web.config目录到包含发布HTML输入的Web表单的目录的相对路径。