ValidateRequest =“false”和.NET 4问题

时间:2010-06-18 20:46:27

标签: asp.net asp.net-4.0

.NET 4由于某种原因破坏了ValidateRequest=“false”

解决方案是 - 只需将<httpRuntime requestValidationMode="2.0" />放入您的web.config文件中。

该解决方案的问题在于它破坏了对.NET 2.0的支持!

IIS拒绝接受web.config中的未知属性。我也不喜欢这种全有或全无的性质。

我是否可以为需要它的单个页面设置requestValidationMode(或以其他方式禁用请求验证)?不破坏web.config与2.0的后向兼容性

5 个答案:

答案 0 :(得分:1)

我可以确认将validateRequest =“true”添加到web.config文件的方法有效并且非常棒!

使用它可以使页面级指令再次正常工作,并且无需将行为更改回ASP.Net2.0模式。

奇怪的是它有任何影响,因为无论如何通常默认启用请求验证,但无论如何。

答案 1 :(得分:0)

好的,看起来这样做是不行的,我可以轻松地逃避数据,但我认为这是一个合理的问题 - 至少在这里做一个说明,这是不可能的。

答案 2 :(得分:0)

我认为,我找到了一种更好的方法。我不喜欢在4.0中恢复到2.0设置的选项。我也不喜欢全部或全部选项。

我玩了几件事,至少在我的脑海里有一个实用的解决方案。 默认情况下,无论页面指令“ValidateRequest =”false“

如何,都会验证所有页面

我在名为pages的system.web部分的web.config中找到了在何处进行此设置。 (http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.validaterequest.aspx)

如果将validateRequest属性添加到pages元素中,则可以控制整个站点的验证。

    

但是在测试时我偶然发现了一件幸福的事情。我无法找到这方面的证据,但这是我所经历的。 默认情况下,验证在任何地方都会打开,但如果我将validateRequest设置为“true”,我的单个页面指令就​​像在2.0中一样。我不知道为什么,但我很高兴。

总结...... 将validateRequest设置为true。 像这儿。     

然后任何页面指令都适用于该验证。

答案 3 :(得分:0)

如果使用的是.net4,则将此行添加到Web配置

<pages validateRequest="false">

完全不需要使用<httpRuntime requestValidationMode="2.0" />

答案 4 :(得分:-1)

我只是把它放在system.web节点的web.config中。

<httpRuntime requestValidationMode="2.0" />