2011-04-04 63 views
6

(ASP.NET 4.0 C#)validateRequest =“false”是行为怪异的

我在我的网站configconfig中配置了<httpRuntime requestValidationMode="2.0" />。和 我有我的validateRequest="false"页面目录。

在一页上,我从ckeditor(textarea)发送一些数据(html)到数据库。工作正常。 在另一页上,我使用数据库中的数据填充ckeditor,然后更新它(发送回去),然后我得到着名的“从客户端检测到潜在危险的Request.Form值。”

让我很困惑。唯一的区别是,在第二页上,数据被动态地插入到textarea中,第一页上的textarea在pageload上是空的。我在这里错过了什么吗?我很确定编码/解码并不意味着什么,因为在我甚至可以在后端开始搞乱它之前,框架会阻止它。

+0

您确定您在两个页面上都有validateRequest = false吗?也许可以在web.config上移动它。 – Aristos 2011-04-04 20:59:23

+0

ValidateRequest是否区分大小写? – IrishChieftain 2011-04-04 21:09:35

回答

1

好吧,我还没有找到一个答案,为什么它表现它的方式。但是,我发现了一个非常简单快捷的方法(+新的优点)。

即使世界谁提出一个.NET CKEditor的控制

http://cksource.com/forums/viewtopic.php?f=11&t=15882

有亚去的人。奇迹般有效。没有验证错误是如此之多。

0

尝试在页指令中设置ValidateRequest为false?一个更好的选择可能是使用微软反跨站点脚本库:

http://msdn.microsoft.com/en-us/library/aa973813.aspx

类似的问题在这里回答:

What's the difference between requestValidationMode 2.0 and 4.0

也有可能,要么ASP.NET 4.0未安装或应用程序池未设置为在4.0下运行。

+0

我已经在页面指令中有validateRequest为false,如我的问题所述:)其他线程真的没有帮助,但生病尝试查看您发送给我的另一个链接。感谢您的回答:) – 2011-04-06 12:50:57

+0

检查IIS中的应用程序池基本设置以查看它是否设置为4.0。如果不是,这可能是问题所在。 – IrishChieftain 2011-04-06 13:45:31

+0

我只是通过VS10在虚拟服务器上运行它:) – 2011-04-07 17:49:59

0

ValidationRequest =“false”仅适用于以前版本框架中的.aspx文件。

在ASP.NET 4中,它在任何HTTP请求的BeginRequest阶段之前启用了所有请求。因此,请求验证适用于所有ASP.NET资源(如Web服务调用和自定义HTTP处理程序)的请求。

要绕过这个新机制,必须创建自己的RequestValidator并将web.config更改为使用此自定义验证程序。

http://msdn.microsoft.com/en-us/library/system.web.util.requestvalidator.aspx

+0

啊哈,有趣的,我会研究它。显然这个框架并没有阻止我的数据被放到我的数据库中,它只是显示错误:S – 2011-04-07 17:53:06

+0

好吧,大卫,我读过它了,好东西,但是你不是说msdn正在说的完全相反吗?对我来说,它的听起来像(阅读你的链接后)我不必担心验证错误。我唯一担心的是如果我想要验证某些特定的内容,但是你不是说它会一直验证 - 无论是什么? – 2011-04-07 18:24:53

+0

反正,真的不要再浪费眼泪了,我想我会自己写一个requestValidator,就像你说的那样,这是一个关于msdn的好例子,谢谢你的时间伴侣 – 2011-04-07 18:34:03