我们已经安装了.NET在我们的网站服务器的一个4.5框架。 我们的应用程序是针对.NET 4.0和流失负载平衡器后的多台服务器。
安装完成后,我们得到了以下错误消息对一些POST请求
ERROR_NAME = System.ArgumentException ERROR_MESSAGE =无效回发或回调参数。 事件验证使用在一个页面配置或<%@页EnableEventValidation =“真”%>启用。 为了安全起见,此功能验证参数回发或回调事件,从最初呈现这些事件的服务器控件。 如果数据是有效的和预期,使用ClientScriptManager.RegisterForEventValidation方法,以注册回发或回调数据以进行验证。 ERROR_DETAILS =来源:System.Web程序
当从服务器请求与.NET 4.5安装在请求的主体中的__EVENTVALIDATION值是不同的。 MSDN提到,在.NET 4.5使用加密变化的配置选择,因此默认情况下它应该是向后兼容的。
是否有一个配置的变化,而不禁用事件验证,我需要_EVENTVALIDATION做的行为机器上同样安装了.NET 4.5,因为它只有.NET 4.0的行为?
我有同样的问题,因为我们正在迁移我们的服务器农场到Windows 2012(.NET 4.5)从2003年(.NET 4.0)。 展望ClientScriptManager,事件验证码已发生很大变化。
用于此修复程序是添加到使用传统的事件验证兼容性appSetting描述这里
<appSettings>
<add key="aspnet:UseLegacyEventValidationCompatibility" value="true" />
</appSettings>
现在,在我的网页事件验证产生的值是否通过.NET 4.0或4.5生成相同的
有趣的问题,我会尝试冻结一些行为的框架的特定版本(在web.config)。
该请求验证模式
<httpRuntime requestValidationMode="4.0" />
编译目标框架
<compilation targetFramework="4.0">
控制渲染兼容版本
<pages controlRenderingCompatibilityVersion="4.0"/>
我会检查机器关键配置,并确保其在所有服务器上的相同。 在ASP.NET使用了的machineKey和http://aspnetresources.com/tools/machineKey
此外,您还可以检查,如果你有任何的客户端脚本
“如果你编写客户端脚本在运行时在客户端更改控制,您可能需要使用RegisterForEventValidation方法,以避免错误事件验证错误。”
http://msdn.microsoft.com/en-us/library/system.web.ui.page.enableeventvalidation.aspx
文章来源: ASP.NET EventValidation fails when .NET 4.5 Framework is installed in only one server behind the load balancer