0

在我们的网络应用程序的一组特定步骤下,我收到了一个相当标准的事件验证错误:

Application_Error intercepted exception: Exception of type 'System.Web.HttpUnhandledException' was thrown.
System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentException: Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

真正令人头疼的是,这发生在我们的测试环境中,而不是我尝试重新创建时的开发​​环境。我已经仔细阅读了我们的 web.config 中可能发生的变化,但我没有看到任何跳出的东西。环境之间的代码完全相同——TeamCity 确定了这一点。所以我强烈怀疑是环境问题,但我不知道从哪里开始,比如事件验证。这通常在代码中处理。

有没有人知道对此进行调查的途径?我意识到我正在做的一些细节是稀疏的,但那是因为在我们的开发环境中一切都可以 100% 正常工作,而且根本没有问题,所以我不知道什么是相关的,什么是相关的吨。如果需要更多详细信息,请询问,我很乐意提供。

4

2 回答 2

1

对于后人来说,情况就是这样。

我们有一些下拉列表,这些下拉列表是通过 HTTPWebSession 缓存中的信息填充的。伟大的。在我们的工作流程中,我们也有一个 AJAX 部分回发,因为我们必须对用户输入进行一些服务器端验证,而不会搞砸屏幕上的所有内容。仍然没有问题。

当此部分回发返回并尝试使用一些链接到我们项目中不再存在的图像的 CSS 类时,就会出现问题。图像被移动了。这将返回 404。只要代码实际上没有使用这些图像,您仍然会认为这不是问题。事实并非如此。

问题是,在我们的测试环境中,404 就是 404。它只是返回,没什么大不了的。在我们的生产环境中,我们将 404 错误重定向到我们的登录页面,因为这是一种糟糕的用户体验,并且隐含地揭示什么存在和不存在是不好的。这是环境因素。

...因为我们在高安全性环境中工作,所以登录页面会擦除缓存作为其 PreRender 的一部分,因此它是否实际加载页面图形并不重要。Ergo,一个 AJAX 部分回发擦除了缓存,这使得下拉列表中的会话加载信息 - 不被部分回发更新!-- 不是预期的输入。而且,完全合理地,事件验证拒绝在整页提交时接受此输入。

这个奇怪而复杂的问题被解决了……通过删除一个 CSS 类。

于 2014-03-21T19:15:47.697 回答
1

大概您已经检查了配置文件中的 enableEventValidation 属性 - 默认情况下这将不存在。但它很可能位于一台或两台机器上的 machine.config 中,从而导致该选项的配置不同。

于 2014-03-05T21:13:38.687 回答