-->

当.NET 4.5框架安装在只有一个负载平衡器后面的服务器ASP.NET EventValidati

2019-08-07 03:53发布

我们已经安装了.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的行为?

Answer 1:

我有同样的问题,因为我们正在迁移我们的服务器农场到Windows 2012(.NET 4.5)从2003年(.NET 4.0)。 展望ClientScriptManager,事件验证码已发生很大变化。

用于此修复程序是添加到使用传统的事件验证兼容性appSetting描述这里

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

现在,在我的网页事件验证产生的值是否通过.NET 4.0或4.5生成相同的



Answer 2:

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

该请求验证模式

<httpRuntime requestValidationMode="4.0" />

编译目标框架

<compilation targetFramework="4.0">

控制渲染兼容版本

<pages controlRenderingCompatibilityVersion="4.0"/>


Answer 3:

我会检查机器关键配置,并确保其在所有服务器上的相同。 在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