页面事件验证失败发生在一个环境中,而不是另一个环境中



我在我们的Web应用程序的一组步骤下遇到了一个相当标准的事件验证错误:

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可能会改变的事情,但是我看不到任何跳出来的事情。环境之间的代码是完全相同的 - 团队表现可以确定。因此,我强烈怀疑一个环境问题,但是我对从事件验证之类的东西开始的地方一无所知。通常用代码处理。

有人想知道对此进行调查的想法吗?我意识到我正在做的事情很少,但这是因为一切在我们的开发环境中效果100%,而且没有问题,所以我不知道什么会相关,什么也不会t。如果需要更多详细信息,请询问,我将很高兴提供它们。

大概您已经检查了配置文件中的EnableEventValidation属性 - 默认情况下,这将不存在。但是它很可能在一台或两台机器上的机器中。

对于后代,这就是情况。

我们有一些下拉列表通过HTTPWebsession Cache的信息填充。伟大的。在工作流程期间,我们还在某个时刻有一个Ajax部分回发,因为我们必须对用户输入进行某些服务器端验证,而无需拧紧屏幕上的所有内容。仍然没问题。

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

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

...因为我们在高安全性环境中工作,所以登录页面将缓存作为其Prerender的一部分擦拭,因此它是否实际上加载了页面图形都没关系。Ajax部分寄发后返回eRgo擦除了缓存,该缓存使下拉列表中的会话加载了信息 - 部分发回家未更新! - 没有预期的输入。而且,完全合理地,事件验证拒绝在整页上接受此输入。

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

相关内容