簡體   English   中英

驗證視圖狀態MAC失敗

[英]Validation of viewstate MAC failed

運行ASP.NET Web窗體,運行應用程序運行正常。 當應用程序空閑4到5分鍾時,會出現此錯誤:

驗證視圖狀態MAC失敗。 如果此應用程序由Web場或群集托管,請確保配置指定相同的validationKey和驗證算法。 自動生成不能在群集中使用。

如何解決呢?

這個免費的在線工具: http ://aspnetresources.com/tools/machineKey在web.config文件中的system.web元素下生成一個machineKey元素。 這是它生成的示例:

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

一旦在web.config中看到此錯誤,錯誤本身就突然變得有意義。 你得到的錯誤說

“確保配置指定相同的validationKey和驗證算法”。

當您查看此machineKey元素時,突然您可以看到它在說什么。

在此情況下,可能不需要修改system.web元素下的pages元素。 這避免了與那些屬性相關的安全性問題。


通過在您的web.config中“硬編碼”此值,無論服務器場中的哪台服務器將其拾取,asp.net用於序列化和反序列化您的視圖狀態的鍵都保持不變。 您的加密變為“便攜式”,因此您的視圖狀態變為“便攜式”。

我只是在猜測,如果由於任何級別的重置而導致其完全“消失”,那么由於某種原因它“忘記”了它所擁有的密鑰,也許同一台服務器 (不在服務器場中)就會出現此問題。 這也許就是為什么您在空閑時間后看到此錯誤並嘗試使用“陳舊”頁面的原因。

這不是您的問題,但可能會對其他人有所幫助。 確保您要發回到同一頁面。 檢查您的表單標簽上的操作,並查看您的瀏覽器使用Firefox Live HTTP標頭請求的URL。

我之所以遇到這種情況,是因為我發回到了具有相同名稱但路徑不同的頁面。

使用以下元素修改您的web.config:

<pages validateRequest="false" 
       enableEventValidation="false" 
       viewStateEncryptionMode ="Never" />

需要任何其他信息,請參考ASP.NET論壇主題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM