C# 潜在危险的请求。从客户端检测到表单值

C# 潜在危险的请求。从客户端检测到表单值,c#,jquery,asp.net,architecture,postback,C#,Jquery,Asp.net,Architecture,Postback,我有这个问题。我什么都试过了。ValidateRequest=“false”。。以及对html进行解码和编码。。等等等等 我需要的是一个弹出框(因此我使用ModalPopupXtender)向用户显示,用户可以在其中键入xml设置,然后单击“确定/取消”按钮关闭弹出框并保存 然而,我不断收到这个错误“一个潜在危险的请求。从客户端检测到表单值” 下面是我的测试代码(我的场景和错误的快速示例) 代码隐藏: using System; using System.Collections.Generi

我有这个问题。我什么都试过了。ValidateRequest=“false”。。以及对html进行解码和编码。。等等等等

我需要的是一个弹出框(因此我使用ModalPopupXtender)向用户显示,用户可以在其中键入xml设置,然后单击“确定/取消”按钮关闭弹出框并保存

然而,我不断收到这个错误“一个潜在危险的请求。从客户端检测到表单值”

下面是我的测试代码(我的场景和错误的快速示例)


代码隐藏:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ModalPopupExtender.Show();
            string str = "<?xml version=\"1.0\" encoding=\"utf-8\"?><XmlConfig xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"> <XmlConfig Type=\"TEST\" DefiningXpath=\"/PERSON/NAME\"><Index Name=\"Name\" XPath=\"/PERSON/NAME/VALUE\" Type=\"String\" /><Index Name=\"Id\" XPath=\"/PERSON/NAME/ID\" Type=\"String\" /> </XmlConfig></XmlConfig>";

            txtAreaValue.InnerText = str;
        }

        protected void Display_Click(object sender, EventArgs e)
        {
            //Shows the Item detail Edit box
            ModalPopupExtender.Show();
        }

        protected void BtnCancel_Click(object sender, EventArgs e)
        {
            ModalPopupExtender.Hide();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
命名空间WebApplication1
{
公共部分类WebForm1:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
ModalPopupExtender.Show();
字符串str=“”;
txtAreaValue.InnerText=str;
}
受保护的无效显示\u单击(对象发送方,事件参数e)
{
//显示“项目详细信息”编辑框
ModalPopupExtender.Show();
}
受保护的无效BtnCancel\u单击(对象发送者,事件参数e)
{
ModalPopupExtender.Hide();
}
}
}
要运行代码。。将ref添加到AjaxControltoolkit.dll,然后运行,您将看到文本区域填充了xml。单击“取消”按钮,这将导致错误。有人能帮我吗?

使用

<httpRuntime requestValidationMode="2.0" />

在web.config中(保留该元素上已有的任何属性,如果该元素已经存在)。ASP.NET4.0忽略
ValidateRequest
否则

当然,要确保你采取了必要的措施来防范真正危险的请求,因为这不是为你做的


编辑:一个很好的方法是创建您自己的类,该类派生自
RequestValidator
,并使用4.0行为,但将其作为进行检查的类。

好吧,人们只谈论Asp.net 4.0。。。我想我们也需要解决其他版本的问题。今天,当我用TinyMCE替换我的AjaxToolkit编辑器时,我遇到了同样的问题,在回发时我发现了同样的问题

“从客户端检测到潜在危险的请求。表单值”。

所以我在我的网络配置中使用了这句话,它对我很有用

<system.web>
    <pages validateRequest="false" />
</system.web>

它应该在Asp.net 2.0到3.5之间工作

更新:甚至可以运行到.net 4.5


更新:您还可以尝试在页面级别而不是整个网站上验证请求。只是想让读者选择最好的方式。感谢DVD指出这一点。

以下是可能对您有所帮助的解决方案。 为此进行服务器端配置设置。 如果希望允许HTML元素作为项目中选定页面的输入,请设置此页面属性

<%@ Page ValidateRequest="false" %>

这将在每页上验证request=“false”。 如果您希望在项目中的所有页面中进行更改,请在Web.Config文件中进行更改。 在节中添加此标记

<httpRuntime requestValidationMode="2.0" />

如果您使用的是.Net 4.0,则必须在Web.Config文件中再做一次更改。 在节中添加此标记

<httpRuntime requestValidationMode="2.0" />

以下是.Net 4.0中不验证所有页面请求的配置

<configuration>
  <system.web>
     <httpRuntime requestValidationMode="2.0" />
  </system.web>
  <pages validateRequest="false">
  </pages>
</configuration>


下面是这方面的完整示例

有3个选项可以删除此错误

  • 在页面指令中设置
    validateRequest=“false”
  • 在web.config文件中设置
    validateRequest=“false”
  • 如果您使用的是DotNet 4.0,请在web.config中设置
    requestValidationMode=“2.0”
  • 查看更多信息

    “有潜在危险的请求。从客户端检测到表单值”。”

    1) 在
    web.config
    文件中设置
    httpRuntime requestValidationMode=“2.0”requestPathInvalidCharacters=“,\”

    2) 在web.config文件的侧页标记中设置
    validateRequest=“false”

    <system.web>
        <httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\"/>
     <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" validateRequest="false"/>
    <system.web>
    

    我在从aspx页面向代码隐藏发送一些电子邮件模板时遇到了同样的问题

    所以我试图通过添加

     <httpRuntime requestValidationMode="2.0" />
    

    aspx页面的page指令中的attribute。

    我创建了一个包含articleId和article\u content列的表文章。我还为article_内容栏使用了html编辑器。当我试图保存时,我遇到了同样的错误。通过向类中的article_content属性添加[allowtml]解决了此问题

     [AllowHtml]
     [Required]
     public string article_content { get; set; }
    

    不要忘记使用System.Web.Mvc包含名称空间。有关更多详细信息:

    如果符合您的需要,您可以在发送到服务器之前使用JavaScript对值进行编码


    请参阅

    查看此可能的《谢谢》副本,mikey:-)它成功了。。谢谢,真不敢相信它这么简单..另一个问题是,这只适用于框架4?关于3.5呢?3.5不需要它,因为问题是4.0发生了变化(我没有注意到mikey链接到的那一个,尽管我不同意@JonEgerton的重复声明,因为所有信息都在那里,尽管mikey的不是相同的问答)。嗨,Jon有没有办法在不改变web.config文件的情况下实现这一点。很抱歉在错误的地方提问:)@AkshayKulkarni更改主.NET配置以更改de
     [AllowHtml]
     [Required]
     public string article_content { get; set; }