viewstate MAC验证每天失败50次

时间:2011-10-05 11:29:57

标签: asp.net validation viewstate

好的,所以这个主题在互联网上并不新鲜,我明白了。但我还没能找到解决问题的解决方案。

问题是我一直在我的网站上发现这个例外。也许每天50次左右。 (参见下面的stacktrace)

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

我已经在我的web.config文件中预定了一个机器密钥 - 这根本没有帮助。 然后我在某处读到我可能是因加载缓慢而导致的错误,但我正在记录页面加载时间,并且当发生此错误时,没有任何令人担忧的事情。 一些人建议禁用viewstate解密,但正如很多其他ppl写的那样,那不是真正的解决方案。

任何人都知道该怎么做?

Stacktrace:

at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
at System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState)
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)

1 个答案:

答案 0 :(得分:0)

您需要将机器密钥添加到web.config

即。     <&的System.Web GT;     < machineKey decryption =“AES”validation =“SHA1”decryptionKey =“875CF3B9B54E7058CE31EAFAB05AD19400FF3DA5CDB0D324D7433C4B233B350D”validationKey =“5BC50363620E53177C8E7E81BE1CF13141F860C5E41AF3EEEFC82AA37160E82D”/>

原因是,在Web场中,您看到的页面可能由与您回发的页面不同的计算机提供服务,并且视图状态/ cookie等的解密将无法匹配,除非服务器场设置的所有者匹配机器在他的农场(不太可能)。在单个服务器环境中,此密钥是自动生成的,但它永远不会重要,因为应用程序池始终知道自己的密钥