無法驗證資料。執行當前 Web 請求期間,出現未處理的異常。請檢查堆疊跟蹤資訊
無法驗證資料。
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆疊跟蹤資訊,以瞭解有關該錯誤以及程式碼中導致錯誤的出處的詳細資訊。
異常詳細資訊: System.Web.HttpException: 無法驗證資料。
源錯誤:
執行當前 Web 請求期間生成了未處理的異常。可以使用下面的異常堆疊跟蹤資訊確定有關異常原因和發生位置的資訊。
堆疊跟蹤:
[HttpException (0x80004005): 無法驗證資料。]
System.Web.Configuration.MachineKey.GetDecodedData(Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Int32& dataLength) +195
System.Web.UI.LosFormatter.Deserialize(String input) +60
[HttpException (0x80004005): Authentication of viewstate failed. 1) If this is a cluster, edit <machineKey> configuration so all servers use the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster. 2) Viewstate can only be posted back to the same page. 3) The viewstate for this page might be corrupted.]
System.Web.UI.LosFormatter.Deserialize(String input) +118
System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +101
[HttpException (0x80004005): Invalid_Viewstate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)
System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +442
System.Web.UI.Page.LoadPageViewState() +18
System.Web.UI.Page.ProcessRequestMain() +447
解決方案
解決方法:在Page指令中設定禁止MAC(身份驗證程式碼 ):
<% @ Page EnableViewStateMac="false">
個人分析:當網頁提交給本身時,伺服器會通過MAC以檢查檢視的狀態,看狀態是否在客戶端被更改.但這也就導至一個潛在的問題,即伺服器端的狀態一般保持時間很短,如果在伺服器上狀態消亡後再提交頁面的話,就會造成MAC驗證不通過,產生無法驗證的錯誤提示.
這個解決方法也存在很多麻煩,比如需要在每個提交給自身的頁面加上這條指令.而且存在一些安全隱患,如有人惡意更改檢視狀態等.