2009-07-17 96 views
1

驗證視圖狀態MAC失敗。如果此應用程序由Web Farm或集羣託管,請確保<machineKey>配置指定相同的validationKey和驗證算法。 AutoGenerate不能在集羣中使用。「驗證ViewState MAC失敗」 - 這個錯誤是什麼意思?

我使用localhost btw。

+0

你真的需要解釋更多。給代碼,你正在嘗試做什麼,等等。 – AlbertoPL 2009-07-17 19:48:49

+0

謝謝Sean Bright :) – Yves 2009-07-17 19:49:39

+1

很多原因。 http://stackoverflow.com/search?q=%E2%80%9CValidation+of+ViewState+MAC+failed%E2%80%9D – Greg 2009-07-17 19:50:33

回答

1

默認情況下,ASP.NET將嘗試驗證視圖狀態。如果驗證失敗,它會拋出這個異常。它可能無法驗證的原因包括重新編譯網站,然後刷新瀏覽器中的表單或某種服務器羣/集羣(但如果您使用本地主機,則傾向於前者)。

如果它真的阻礙了你,你可以關閉它,但是任何人都可以用你的視圖狀態猴子。只要你不相信用戶輸入(而你不應該),這並不是什麼大問題。在你的web.config:

<pages enableViewStateMac="false" /> 
-2

退房this long thread on the official ASP .NET forum - 它幾乎涵蓋了所有的,爲什麼這可能發生,一些解決方案的原因。

注意以下往往是一個tempoary修復,但意識到這樣做的安全隱患。

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

這可能與應用程序回收有關。 Viewstate由應用程序首次啓動時生成的密鑰簽名。如果您的應用程序池已在請求之間循環,則視圖狀態簽名密鑰將會更改,並且以前的視圖狀態將失效,您將看到異常。

爲了排除這種情況,你可以在你的web.config文件中使用set a specific machine key

另一件值得注意的事情是,如果你有一個大量使用數據綁定的頁面,你的viewstate可能會非常大,並且頁面可能在瀏覽器完成之前呈現給瀏覽器,並且如果你做了一些導致在頁面完全下載之前發回,您可能會看到錯誤。這在.NET 3.5 SP1中得到了修復。您還可以通過將表單呈現爲禁用狀態,然後啓用客戶端或通過更改viewstate的生成位置來解決此問題。 ASP.NET調試博客有the instructions.

如果它仍然發生,你不是試圖使用JavaScript對viewstate表單域進行更改嗎?