7

我们在其中一台 Web 服务器中安装了 .net 4.5 Framework。我们的应用程序针对 .net 4.0 并在负载均衡器后面运行多个服务器。

安装后,我们收到一些 POST 请求的以下错误消息

error_name=System.ArgumentException error_message=回发或回调参数无效。使用配置或页面中的 <%@ Page EnableEventValidation="true" %> 启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法注册回发或回调数据以进行验证。error_details=来源:System.Web

当从安装 .net 4.5 的服务器请求时,请求正文中的 __EVENTVALIDATION 值不同。MSDN 提到 .net 4.5 中的密码学更改使用 opt in 配置,因此默认情况下它应该是向后兼容的。

是否有配置更改,在不禁用事件验证的情况下,我需要做 _EVENTVALIDATION 在安装 .net 4.5 的机器上的行为与仅在 .net 4.0 上的行为相同?

4

3 回答 3

6

我遇到了同样的问题,因为我们目前正在将我们的服务器场从 2003 (.NET 4.0) 迁移到 Windows 2012 (.NET 4.5)。查看 ClientScriptManager,事件验证代码发生了很大变化。

解决此问题的方法是添加 appSetting 以使用旧事件验证兼容性,如此处所述

<appSettings>
  <add key="aspnet:UseLegacyEventValidationCompatibility" value="true" />
</appSettings>

现在,我的页面中为事件验证生成的值是由 .NET 4.0 还是 4.5 生成的

于 2013-10-15T13:13:40.903 回答
0

有趣的问题,我会尝试将某些行为冻结到特定版本的框架(在 web.config 中)。

请求验证模式

<httpRuntime requestValidationMode="4.0" />

编译目标Framework

<compilation targetFramework="4.0">

控件渲染兼容性版本

<pages controlRenderingCompatibilityVersion="4.0"/>
于 2013-08-03T18:29:26.850 回答
0

我会检查机器密钥配置并确保它在所有服务器上都相同。 MachineKey 在 ASP.NET和 http://aspnetresources.com/tools/machineKey中的用途

此外,您可以检查是否有任何客户端脚本

“如果您编写的客户端脚本在运行时更改客户端中的控件,则可能必须使用 RegisterForEventValidation 方法以避免错误的事件验证错误。”

http://msdn.microsoft.com/en-us/library/system.web.ui.page.enableeventvalidation.aspx

于 2013-08-29T21:25:18.147 回答