我有这个问题。我尝试了一切。 ValidateRequest =“false”..以及解码和编码html ..等等。
我需要的是一个弹出框(所以我使用ModalPopupExtender)向用户呈现人们可以输入xml设置并单击ok / cancel按钮关闭弹出窗口并保存。
但是我继续收到此错误“从客户端检测到一个潜在危险的Request.Form值”..
下面是我的测试代码(我的方案和错误的快速示例)..
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1"
ValidateRequest="false" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:Panel ID="Popup" runat="server" Width="800px" Style="display: none;">
<asp:LinkButton ID="Display" runat="server" Style="display: none;" OnClick="Display_Click" />
<cc1:ModalPopupExtender ID="ModalPopupExtender" runat="server" TargetControlID="Display"
PopupControlID="Popup" DropShadow="false" Y="10" />
<div id="Item">
<div class="Item">
<table width="100%">
<tr>
<td>
<textarea id="txtAreaValue" cols="35" rows="6" style="resize: none;" runat="server" />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnOk" Text="Ok" SkinID="default" Width="50px" runat="server" />
<asp:Button ID="btnCancel" Text="Cancel" SkinID="default" Width="50px" OnClick="BtnCancel_Click"
runat="server" />
</td>
</tr>
</table>
</div>
</div>
</asp:Panel>
</div>
</form>
</body>
</html>
代码背后:
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();
}
}
}
运行代码..将ref添加到AjaxControltoolkit.dll然后运行,您将看到textarea填充了xml。单击取消按钮,这会导致错误。请有人帮帮我吗?
答案 0 :(得分:49)
使用
<httpRuntime requestValidationMode="2.0" />
你的web.config中的(保留你在该元素上已有的任何属性,如果它已经存在)。 ASP.NET4.0否则忽略ValidateRequest
。
当然,确保你采取必要的措施来防止真正危险的请求,因为它不是为你做的。
编辑:这样做的一个好方法是创建自己的派生自RequestValidator
的类,并使用4.0行为,但将其作为执行检查的类。
答案 1 :(得分:29)
以下是可能对您有所帮助的解决方案。 为此进行服务器端配置设置。 如果您希望允许HTML元素作为项目中所选页面的输入,而不是设置此页面属性。
<%@ Page ValidateRequest="false" %>
每页上的ValidateRequest =“false”。 如果您想要项目中的所有页面,而不是在Web.Config文件中进行更改。 在此部分添加此标记。
如果您使用.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>
这是完整的例子。的 Click Here... 强>
答案 2 :(得分:5)
嗯,人们只谈论Asp.net 4.0 ......我想我们也需要解决其他版本。今天,当我用TinyMCE替换我的AjaxToolkit编辑器时遇到了同样的问题,并且回发时发现了同样的问题。
“从客户端检测到潜在危险的Request.Form值”..
所以我在webconfig中使用了这一行,它对我有用。
<system.web>
<pages validateRequest="false" />
</system.web>
它应该适用于Asp.net 2.0到3.5。
更新:甚至可以运行.net 4.5
更新:您还可以尝试在页面级别而非整个网站上验证请求。只是想让读者选择最好的方式。感谢DVD指出这一点。
答案 3 :(得分:1)
我创建了一个包含articleId和article_content列的表格文章。我还在article_content列中使用了html编辑器。当我试图保存时,我得到了同样的错误。通过将[AllowHtml]添加到类中的article_content属性来解决此问题。
johndoe@gmail.com
不要忘记使用System.Web.Mvc包含命名空间。有关详细信息:http://www.infinetsoft.com/Post/A-potentially-dangerous-Request-Form-value-was-detected-from-the-client/1246
答案 4 :(得分:0)
有3个选项可以删除此错误。
validateRequest="false"
。validateRequest="false"
。requestValidationMode="2.0"
结帐this link了解详情。
答案 5 :(得分:0)
“从客户端检测到一个潜在危险的Request.Form值”..
1)在httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="<,>,\"
文件
web.config
2)在web.config文件的侧页标签中设置validateRequest="false"
<system.web>
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="<,>,\"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" validateRequest="false"/>
<system.web>
答案 6 :(得分:0)
我在将一些电子邮件模板从aspx页面发送到代码后面时遇到了同样的问题....
所以我尝试通过添加
来解决这个问题 <httpRuntime requestValidationMode="2.0" />
在enter code here
下的网页配置中,但除非我推文
ValidateRequest="false"
在aspx页面的page指令中的attrribute。
答案 7 :(得分:0)
如果符合您的需要,您可以在发送到服务器之前使用JavaScript对值进行编码
请参阅this answer