【问题标题】:ValidateRequest=“false” and .NET 4 problemValidateRequest="false" 和 .NET 4 问题
【发布时间】:2010-06-18 20:46:26
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • "它拒绝接受 web.config 中的未知属性。"这是什么意思?当我把例如<authentication mode="Forms" blabla="5"> 启动应用程序时出现错误(“未知的 blabla 属性”),无论我是否设置了 <httpRuntime requestValidationMode="2.0" />。究竟是什么问题?
  • 问题是我不能有相同的 web.config 在 .NET 2 和 .NET 4 下运行。
  • @MK 为什么需要在 NET2 和 NET4 下有相同的配置????我认为你试图做的却是做不到的。
  • @Aristos 为什么不为 NET2 和 NET4 设置相同的配置?我有一个需要 .NET2 并且在 .NET4 下可以正常工作的产品,除了这个小东西。为什么我会有 2 个单独的 web.config 文件?我的产品如何知道使用哪一种?我想它可以在安装过程中检测到,但是如果用户稍后出于某种原因升级到 .NET4 怎么办?
  • @Aristos 有些人仍在销售产品,而不是建立网站。当您销售产品时,您需要确保它在尽可能多的场景下工作,以最大限度地降低支持成本。

标签: asp.net asp.net-4.0


【解决方案1】:

我可以确认在 web.config 文件中添加 validateRequest="true" 的方法是有效的,而且非常棒!

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

奇怪的是它有任何影响,因为默认情况下通常会启用请求验证,但没关系。

【讨论】:

    【解决方案2】:

    如果您使用的是 .net4,则将此行添加到 web config

    <pages validateRequest="false">
    

    而且根本不需要使用&lt;httpRuntime requestValidationMode="2.0" /&gt;

    【讨论】:

      【解决方案3】:

      好的,看起来无法做到这一点,我可以轻松地转义数据,但我认为这是一个合理的问题 - 至少要在此处说明无法做到这一点。

      【讨论】:

        【解决方案4】:

        我想我找到了更好的方法。我不喜欢在 4.0 中恢复到 2.0 设置的选项。我也不喜欢 all or none 选项。

        我玩了一些东西,至少在我的脑海里有一个实用的解决方案。 默认情况下,无论“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。 像这儿。

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

        【讨论】:

        • 哦,废话。我发现我还有其他一些配置问题,这让我对这个问题产生了误报。我认为您几乎可以忽略我上面的咆哮,除非您可能对 Web 配置页面部分有更深入的了解。
        • 所以经过更多的工作,我会谦虚地承认,除了设置 requestValidationMode="2.0" 之外,没有什么办法可以解决这个问题。但我确实在 web 配置的 pages 部分设置了 validateRequest = "true" 属性。然后我可以逐页禁用验证。
        【解决方案5】:

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

        <httpRuntime requestValidationMode="2.0" />
        

        【讨论】:

        • 我想这可能会破坏您的 web.config 中的 2.0 支持。
        • 是的,这就是问题所在。它打破了2.0。它是整个应用程序的毯子。
        猜你喜欢
        • 2011-05-21
        • 2011-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-25
        • 2012-10-01
        • 1970-01-01
        相关资源
        最近更新 更多