当前位置:  开发笔记 > 后端 > 正文

来自asp.net应用程序的奇怪未处理异常 - viewstate MAC验证失败

如何解决《来自asp.net应用程序的奇怪未处理异常-viewstateMAC验证失败》经验,为你挑选了2个好方法。

我不知道以前有没有人见过这个问题,但我只是难过.这是我的错误页面正在捕获的未处理的异常消息.

错误消息:viewstate MAC验证失败.如果此应用程序由Web场或群集托管,请确保配置指定相同的validationKey和验证算法.AutoGenerate不能在群集中使用.

堆栈跟踪:在System.Web.UI.UI.ObjectStateFormatter.System上的System.Web.UI.ObjectState.Forcerialize(String inputString)处的System.Web.UI.ViewStateException.ThrowError(Exception inner,String persistedState,String errorPageMes​​sage,Boolean macValidationError) System.Web.UI.Page上的System.Web.UI.HiddenFieldPageStatePersister.Load()处的System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter,String serializedState)中的.Web.UI.IStateFormatter.Deserialize(String serializedState). System.Web.UI.Page.ProcessRequestMain(布局includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)System.Web.UI.Page.ProcessRequest(布局includeStagesBeforeAsyncPoint,System.Web.UI.Page.LoadAllState()上的LoadPageStateFromPersistenceMedium()System.Web.UI.Page.ProcessRequest()中的System.Web.UI.Page.ProcessRequest()处于System.Web.UI.Page.ProcessRequest(HttpContext上下文),位于ASP.generic_aspx.ProcessRequest处的System.Web.UI.Page.ProcessRequest(HttpContext上下文)处的布局includeStagesAfterAsyncPoint( System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&completedSynchronously)上的System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()中的HttpContext上下文HttpApplication.ExecuteStep(IExecutionStep step,Boolean&completedSynchronously)HttpApplication.ExecuteStep(IExecutionStep step,Boolean&completedSynchronously)

来源:System.Web

有人对我如何解决这个问题有任何想法吗?谢谢.



1> Chris Driver..:

我似乎记得,如果在页面完全加载之前单击按钮/链接等,则会发生此错误.

如果是这种情况,则错误是由称为事件验证的ASP.net 2.0功能引起的.这是一项安全功能,可确保回发操作仅来自服务器允许和创建的事件,以帮助防止欺骗性回发.此功能通过让控件在呈现时注册有效事件(如在实际的Render()方法中)来实现.最终结果是,在渲染的表单标记的底部,您将看到如下内容:


发生回发时,ASP.net使用存储在此隐藏字段中的值来确保您单击的按钮调用有效事件.如果它无效,那么您将获得您所见过的例外情况.

您所看到的问题特别发生在您在呈现EventValidation字段之前回发时.如果启用了EventValidation(默认情况下是这样),但是当您回发时ASP.net没有看到隐藏字段,您也会得到异常.如果您在完全呈现之前提交表单,则可能尚未呈现EventValidation字段,因此ASP.net无法验证您的点击.

一个解决方法当然是禁用事件验证,但您必须了解安全隐患.或者,在表单完成渲染之前,永远不要回发.当然,这很难告诉你的用户,但也许你可以在表单呈现之前禁用UI?

来自http://forums.asp.net/p/955145/1173230.aspx



2> Darren Kopp..:

@克里斯

如果问题是在页面完全呈现之前单击某个项目,则asp.net 3.5 SP1在页面元素上添加了一个名为renderAllHiddenFieldsAtTopOfForm的web.config条目.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有