出現錯誤:
“/”應用程式中的伺服器錯誤。
--------------------------------------------------------------------------------
驗證檢視狀態 MAC 失敗。如果此應用程式由網路場或群集承載,請確保 <machineKey> 配置指定了相同的 validationKey 和驗證演算法。不能在群集中使用 AutoGenerate。
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆疊追蹤資訊,以瞭解有關該錯誤以及代碼中導致錯誤的出處的詳細資料。
異常詳細資料: System.Web.HttpException: 驗證檢視狀態 MAC 失敗。如果此應用程式由網路場或群集承載,請確保 <machineKey> 配置指定了相同的 validationKey 和驗證演算法。不能在群集中使用 AutoGenerate。
源錯誤:
只有在偵錯模式下進行編譯時間,產生此未處理異常的原始碼才會顯示出來。若要啟用此功能,請執行以下步驟之一,然後請求 URL:
1. 在產生錯誤的檔案的頂部添加一條“Debug=true”指令。例如:
<%@ Page Language="C#" Debug="true" %>
或:
2. 將以下的節添加到應用程式的設定檔中:
<configuration> <system.web> <compilation debug="true"/> </system.web> </configuration>
請注意,第二個步驟將使給定應用程式中的所有檔案在偵錯模式下進行編譯;第一個步驟僅使該特定檔案在偵錯模式下進行編譯。
重要事項: 以偵錯模式運行應用程式一定會產生記憶體/效能系統開銷。在部署到生產方案之前,應確保應用程式調試已禁用。
|
解決方案:因為.NET在對用戶端資料與伺服器間傳送過程中,需要對資料進行加密與解密,而加密與解密演算法可以在web.config裡進行配置,在web.config中,validationKey和decryptionKey的預設值是AutoGenerate,由系統隨機產生密鑰,如果在本地或者使用的是外掛式主控件通常不會有什麼問題,但是使用虛擬機器主機,一台伺服器上有多個虛擬機器主機存在時就會出現以上問題,MSDN中也特別指出不能在群集中使用 AutoGenerate應該指定固定的密鑰值,這就需要在web.config中添加關於machineKey的配置項,並手動設定其中的密鑰值,這裡請注意,不同密碼編譯演算法對於密鑰的最大字元長度是不同的,在這裡能夠使用的有AES,DES,3DES,SHA1,MD5,我只知道DES的密鑰字元長度為16,3DES長度為48,手動設定時密鑰長度必須等於其最大長度,否則會出錯!至於密鑰的16進位值可以隨便輸入。
具體操作方法如下:
找到網站運行根目錄下的web.config檔案,如加亮行所示加上相應的項。設定時,請自行修改KEY值,這關係到伺服器的加密安全。圖片看不清晰請點擊圖片查看。
代碼:<machineKey validation="SHA1" validationKey="78EA3850338FBADCE59D8DDF58C9E4518E7510149C46142D7AAD7F1AD49D95D4" decryptionKey="5FC88DFC24AE12BC" />