是什么原因造成的这一例外在ASP.NET?显然,这是一个视图状态的例外,但我不能再现的错误,页面上的就是扔异常(一个简单的两个文本的形式与一个按钮和导航链接)。

总的来说,我不是在运行一个网场。

异常

错误信息:无法验证 数据。

错误的来源:系统。网

错误的目标网站:字节[] GetDecodedData(Byte[],Byte[],Int32, Int32,Int32ByRef)

后的数据

视图状态:

/wEPDwULLTE4NTUyODcyMTFkZF96FHxDUahiy3noamrjyz+CKsnB

EVENTVALIDATION:

/wEWBAK+8ZzHAgKOhZRcApDF79ECAoLch4YMeQ2ayv/Gi76znHooiRyBFrWtwyg=

例外堆栈

   at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
   at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
   at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState)
   at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
   at System.Web.UI.HiddenFieldPageStatePersister.Load()
   at System.Web.UI.Page.LoadPageStateFromPersistenceMedium()
   at System.Web.UI.Page.LoadAllState()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at ASP.default_aspx.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

~威廉*莱利-土地

有帮助吗?

解决方案

最可能的原因的这一错误是当回发之前停止所有视图状态中的负载(用户命中止或退的按钮),视图状态将无法验证,并扔的错误。

其他潜在原因:

  • 应用程序池回收利用之间的时间视图状态中生成和时间用户员额回到服务器(不).
  • 网的农场里的machineKeys是不同步的(不是你的问题)。

更新: Microsoft条上的问题.除了上述之外,他们建议两个其他可能的原因:

  • 修改的视图状态通过防火墙、防病毒软件
  • 发布从一个aspx页到另一个。

其他提示

在.NET 3.5 SP1中, RenderAllHiddenFieldsAtTopOfForm 属性已添加到PagesSection配置中。

<强>的Web.config

<configuration>

    <system.web>

        <pages renderAllHiddenFieldsAtTopOfForm="true"></pages>

    </system.web>

</configuration>

有趣的是,默认值为true。因此,从本质上讲,如果您使用的是.NET 3.5 SP1,那么ViewState将自动呈现在表单的顶部(在加载页面的其余部分之前),从而消除了您获得的ViewState错误。

我遇到了某些特定版本的Safari 3的问题。我的解决方案是将ViewState移动到表单的顶部(扩展Page类并覆盖3.5之前的Render方法,或.Net 3.5 SP1和更高版本默认执行此操作),并将ViewState拆分为几个不同的字段而不是一个怪物文件。 参见 ASP.NET 2.0中的ViewState分块(maxPageStateFieldLength)

这个免费的在线工具: http://aspnetresources.com/tools/machineKey 生成一个machineKey元素在web.config文件中的system.web元素下。 以下是它生成的示例:

<machineKey validationKey="1619AB2FDEE6B943AD5D31DD68B7EBDAB32682A5891481D9403A6A55C4F91A340131CB4F4AD26A686DF5911A6C05CAC89307663656B62BE304EA66605156E9B5" decryptionKey="C9D165260E6A697B2993D45E05BD64386445DE01031B790A60F229F6A2656ECF" validation="SHA1" decryption="AES" />

在web.config中看到这个后,错误本身突然变得有意义。 你得到的错误是

  

“确保配置指定相同的内容   validationKey和验证算法“。

当你看这个machineKey元素时,突然你可以看到它在说什么。


通过“硬编码” web.config中的这个值,无论服务器场中的哪个服务器接收它,asp.net用于序列化和反序列化视图状态的密钥都保持不变。您的加密变为“便携式”,因此您的视图状态变为“可移植”。

我只是猜测,如果由于任何原因它“忘记”,非常相同的服务器(不在服务器场中)可能会出现此问题。它所拥有的钥匙,由于任何级别的重置都会消除它。这也许就是为什么你在闲置期后看到这个错误并且你试图使用“陈旧”的错误。页。

  

“在所有视图状态加载之前停止回发”

我以前遇到过这个问题,这就是原因。

最初我们禁用ViewStateMac属性( page 指令中的 enableViewStateMac =&quot; false&quot; )来解决它,但这不是问题的真正解决方案,可以威胁数据完整性。我们最终通过禁用我们的提交按钮来解决它,直到页面完全加载,并通过在某些控件上禁用它来修剪视图状态的大小。

我在网站上找到了这个问题的根源,我终于设法解决了。这不是你问题的直接答案,但我想分享这一小部分信息。

过去我尝试过所有内容(包括上面Jeffaxe提出的解决方案)但没有结果,我不想设置 enableViewStateMac =&quot; false&quot; (正如Raelshark上面提到的那样) )到我的页面,因为这只是隐藏了问题。

在我的案例中导致问题的原因是什么?问题是由于在我的网站的某些页面中使用 Intelligencia.UrlRewriter (版本2.0 RC 1版本6)模块引起的。我使用了一些SEO友好链接,这导致ViewState验证失败。当我使用“正常”时链接(而不是SEO友好的链接)问题消失了!

我重复了几次这个问题,以确保它不是误报(我使用的是ASP.NET 3.5)。

我知道有些人可能不会使用上面的模块,但仍然会收到此错误,这意味着原因是其他原因。至少,分享这种经验可能对某些人有所帮助。

当我在没有action属性的页面上设置了表单标记时出现此错误,然后在代码隐藏中,我将表单的action属性更改为“Action.aspx”。

在JavaScript中,我提交了表单(theForm.submit();)

我认为在我的情况下这是一个安全问题,并且在页面上已经设置后你无法改变它??

不确定这是否会对任何人有所帮助,但我的解决方案是在我的webconfig中排除machineKey以使我的cookie通过。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top