錯誤訊息「此頁面的 Viewstate 無效」並未提供此問題足夠的疑難排解資訊

文章翻譯 文章翻譯
文章編號: 832183 - 檢視此文章適用的產品。
如需本文的 Microsoft .NET Framework 1.1 版本,請參閱 831150


重要 請不要在 Web 伺服陣列或叢集式環境的電腦上安裝此 Hotfix,除非您要在此環境的每一台電腦上都安裝此 Hotfix,或是在此環境中的所有其他電腦上都已經安裝 Hotfix 323744。

如需詳細資訊,請參閱本文<其他資訊>一節中的<檢視狀態 MAC 功能說明>。
全部展開 | 全部摺疊

在此頁中

結論

因為「檢視狀態」資料儲存在網頁的隱藏欄位中,當資料在用戶端和伺服器之間傳送時,很容易進行竄改。 為了使「檢視狀態」有更高的安全性,Microsoft ASP.NET 會驗證「檢視狀態」的資料以檢查是否來自正確頁面。

如果 ASP.NET 無法驗證「檢視狀態」的資料,ASP.NET 會將訊息傳回用戶端的瀏覽器,說明「此頁面的 Viewstate 無效並且可能已損毀」。 然而,訊息並未告訴您「檢視狀態」的資料為何無效。

如需有關「檢視狀態」功能的詳細資訊,請參閱本文<其他資訊>一節中的<>。

解決方案

雖然本文提供 Hotfix,但是此 Hotfix 並不會 修正「檢視狀態」資料的錯誤。此 Hotfix 只提供詳細資訊,以協助您疑難排解「檢視狀態」資料的錯誤。

目前 Microsoft 已提供支援的 Hotfix,但是其目的只為修正本文中所描述的問題。您只需要在發生此特定問題的系統上套用此修正程式。這個 Hotfix 可能會接受其他測試。因此,如果此問題沒有對您造成嚴重影響,Microsoft 建議您等候下一版含有此 Hotfix 的 Microsoft .NET Framework 1.0 Service Pack。

如果要立即解決此問題,請與「Microsoft 技術支援處」聯絡,以取得此 Hotfix。如需「Microsoft 技術支援處」完整的電話號碼清單和支援費用的相關資訊,請造訪下列 Microsoft 網站:
http://support.microsoft.com/default.aspx?scid=fh;ZH-TW;CNTACTMS
注意 在某些特殊情況下,如果 Microsoft 技術支援工程師認為某特定更新程式可以解決您的問題時,可能就不會收取一般因支援電話所產生的費用。一般來說,如果有其他支援問題是所描述的特定更新程式無法解決的,才會收取支援費用。

此 Hotfix 的英文版具有下列表格中所列之檔案屬性 (或更新)。這些檔案的日期和時間是以 Coordinated Universal Time (UTC) 表示。當您檢視檔案資訊時,它會轉換為當地時間。如果要查看 UTC 與當地時間的差異,請使用 [控制台] 中 [日期和時間] 工具的 [時區] 索引標籤。
摺疊此表格展開此表格
日期時間版本大小檔名
11-Dec-200307:131.0.3705.478200,704Aspnet_isapi.dll
11-Dec-200307:064,169Aspnet_perf.h
11-Dec-200307:14513,302Aspnet_perf.ini
11-Dec-200307:14510,714Aspnet_perf2.ini
11-Dec-200307:141.0.3705.47824,576Aspnet_regiis.exe
11-Dec-200307:141.0.3705.47828,672Aspnet_wp.exe
11-Dec-200306:271.0.3705.47869,632Corperfmonext.dll
17-Jun-200321:4316,597Installpersistsqlstate.sql
15-May-200321:43:0017,331Installsqlstate.sql
09-Sep-200300:2817,807Installsqlstatetemplate.sql
11-Dec-200306:251.0.3705.478303,104Mscorjit.dll
11-Dec-200323:481.0.3705.4781,953,792Mscorlib.dll
11-Dec-200306:1810,284Mscorlib.ldo
11-Dec-200306:261.0.3705.4782,273,280Mscorsvr.dll
11-Dec-200306:261.0.3705.4782,269,184Mscorwks.dll
11-Dec-200307:101.0.3705.47820,480Perfcounter.dll
23-Aug-200202:2315Smartnav.htm
30-Jul-200300:048,728Smartnav.js
11-Dec-200323:481.0.3705.4781,179,648System.data.dll
11-Dec-200323:481.0.3705.4781,695,744System.design.dll
11-Dec-200323:481.0.3705.4781,175,552System.dll
11-Dec-200323:481.0.3705.478241,664System.messaging.dll
11-Dec-200323:481.0.3705.478311,296System.runtime.remoting.dll
11-Dec-200323:491.0.3705.478131,072System.runtime.serialization.formatters.soap.dll
11-Dec-200323:481.0.3705.4781,200,128System.web.dll
11-Dec-200323:481.0.3705.478507,904System.web.services.dll
11-Dec-200323:501.0.3705.4781,994,752System.windows.forms.dll
11-Dec-200307:2016,632System.windows.forms.ldo
11-Dec-200307:151.0.3705.47857,344System.windows.forms.tlb
11-Dec-200323:501.0.3705.4781,302,528System.xml.dll
11-Dec-200323:471.0.3705.47832,768Tlbimp.exe
17-Jun-200321:431,419Uninstallpersistsqlstate.sql
09-Sep-200300:282,119Uninstallsqlstatetemplate.sql
11-Dec-200323:471.0.3705.47865,536Wsdl.exe

Hotfix 詳細資訊

此 Hotfix 會使「檢視狀態」的錯誤訊息有更詳細的資訊。在您套用此 Hotfix 後,「檢視狀態」錯誤訊息標題會變成「無法驗證資料」。雖然新的錯誤訊息格式不會準確告訴您問題為何,但是較之前的訊息格式提供更詳細的資訊。

注意 如果要獲得有關「檢視狀態」狀態的其他資訊,您可以透過協力廠商的「檢視狀態」解碼程式,執行顯示在錯誤訊息中的「檢視狀態」資訊。

此 Hotfix 設定 HttpException 物件上的 InnerException 屬性,如此一來您便可以使用 Application_Error 方法來記錄之後的例外狀況。請確定您以遞迴方式記錄所有的 InnerException 屬性錯誤。

本 Hotfix 會新增下列有關用戶端的特定資訊至「檢視狀態」錯誤的錯誤訊息中:
  • IP 位址
  • 連接埠編號
  • 使用者代理程式
  • 「檢視狀態」的值
  • Http -Referer
  • 要求頁面的路徑
如果當 ASP.NET 檢查「檢視狀態」的訊息驗證代碼 (MAC,Message Authentication Code) 時發生錯誤,此 Hotfix 會在堆疊追蹤中新增訊息,以提示您檢查 <machineKey> 設定。 錯誤訊息也會提醒您注意「檢視狀態」的資料,只能發佈回相同的頁面。

如果在還原序列化期間發生錯誤,此 Hotfix 會在錯誤訊息中新增 LosFormater 權杖、_deserializationData 權杖,和錯誤發生的位置。

在大部份案例中,如果「檢視狀態」的資料已經截斷,「檢視狀態」功能在 FromBase64String 方法中將遭遇 FormatException 錯誤,並且您將收到下列錯誤訊息:
Base-64 字元陣列的長度無效
然而,如果「檢視狀態」的資料已經截斷而且仍然使用 Base64 來編碼,之後在程式碼中將發生錯誤。

安裝此 Hotfix 前的「檢視狀態」錯誤訊息

'/ViewState' 應用程式中的伺服器錯誤。
--------------------------------------------------------------------------------
此頁面的 Viewstate 無效,而且可能已損毀。
描述:在執行目前的 Web 要求期間發生未處理的例外狀況。 請檢視堆疊追蹤,以獲得有關錯誤及在程式碼中產生來源的相關資訊。

例外詳細資訊:System.Web.HttpException:此頁面的 Viewstate無效,而且可能已損毀。

來源錯誤:

在執行目前的 Web 要求期間產生未處理的例外狀況。 您可以使用下列的例外狀況堆疊追蹤,以識別關於例外狀況來源和位置的資訊。

堆疊追蹤:

[HttpException (0x80004005):此頁面的 Viewstate 無效,而且可能已損毀。]
System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +151
System.Web.UI.Page.LoadPageViewState() +18
System.Web.UI.Page.ProcessRequestMain() +423

在安裝此 Hotfix 後的「檢視狀態」錯誤訊息

'/ViewState' 應用程式中的伺服器錯誤。
--------------------------------------------------------------------------------

無法驗證資料。
描述: 在執行目前的 Web 要求期間發生未處理的例外狀況。請檢視堆疊追蹤,以獲得有關錯誤及在程式碼中產生來源的相關資訊。

例外詳細資訊: System.Web.HttpException:無法驗證資料。

來源錯誤:

在執行目前的 Web 要求期間產生未處理的例外狀況。 您可以使用下列的例外狀況堆疊追蹤,以識別關於例外狀況來源和位置的資訊。

堆疊追蹤:

[HttpException (0x80004005):無法驗證資料。]
System.Web.Configuration.MachineKey.GetDecodedData(Byte[] buf, String strModifier) +866
System.Web.UI.LosFormatter.Deserialize(String input) +44

[HttpException (0x80004005):Viewstate 驗證失敗。1) 如果為叢集,請編輯 <machineKey> 設定,以便使所有的伺服器使用相同的 validationKey 和驗證演算法。叢集中無法使用 AutoGenerate。2) 「檢視狀態」只能發佈回相同的頁面。3) 此頁面的 Viewstate 可能已損毀。]
System.Web.UI.LosFormatter.Deserialize(String input) +102
System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +101

[HttpException (0x80004005):此頁面的 Viewstate 無效,而且可能已損毀。
用戶端 IP:127.0.0.1
連接埠:1095
使用者代理程式:Mozilla/4.0 (相容的;MSIE 6.0;Windows NT 5.1;.NET CLR 1.0.3705)
ViewState: dDwzNDM3NTkwMzg7dDw7bDxpPDEPGk8MT47PjtsPHQ8QDA8cDxwPGw8RGF0YUt
Http -Referer:http://localhost/Connect2Access/WebForm1.aspx
路徑: /connect2access/webform1.aspx.]
System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +435
System.Web.UI.Page.LoadPageViewState() +16
System.Web.UI.Page.ProcessRequestMain() +439
注意 在此範例錯誤訊息中的 ViewState 值已經截斷,以調整成本文內容大小。

狀況說明

Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。

其他相關資訊

如需有關用來描述 Microsoft 產品更新而採用的標準術語詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
824684 用來描述 Microsoft 軟體更新的標準術語說明

「檢視狀態」功能說明

ASP 為 沒有狀態。每次應用程式從伺服器至用戶端進行來回傳送時,資料實際上並未儲存。每次網頁發佈至伺服器時,便會重建頁面。 這種情況會造成與頁面有關的資訊,以及使用頁面上控制項的所有資訊,在每次進行來回傳送時遺失。 例如,如果使用者在文字方塊中輸入資訊,在從瀏覽器或用戶端裝置來回傳送至伺服器時,該資訊會遺失。

ASP.NET 也是沒有狀態。 然而,ASP.NET 有一項「檢視狀態」的新功能,您可以用來保存來回傳送伺服器之間的資料。 「檢視狀態」會在進行來回傳送之間,自動保存頁面的內容值,和頁面上所有控制項的值。 「檢視狀態」資料在頁面上是以隱藏欄位的方式保留。

當頁面發佈回去時,您可以使用「檢視狀態」功能儲存在來回傳送期間所擁有頁面的特定值。 例如,如果應用程式保留使用者特定的資訊,您可以使用「檢視狀態」功能來儲存此使用者特定資訊。 使用者特定資訊是使用在頁面上的資訊,但是並不一定是任何控制項的一部份。

返回<摘要>一節

「檢視狀態 MAC 」功能說明

「檢視狀態」訊息驗證代碼 (MAC,Message Authentication Code) 是一種驗證標記 (也稱為 總和檢查碼),在您搭配安全機碼於訊息上套用驗證機制時所建立。藉由使用相同的機碼來計算和檢查 MAC。因此,只有想要接收者才能檢查 MAC。 可以使用各種密碼編譯技術和演算法來建立 MAC,像是 Secure Hash Algorithm (SHA)、Message Digest 5 (MD5) 演算法和 Data Encryption Standard (DES) 演算法。

「檢視狀態」的 MAC 功能是要避免用戶端傳送含有惡意「檢視狀態」資料的要求。依預設值,會藉由使用 Machine.config 檔案中的 enableViewStateMac="true" 標記來啟用「檢視狀態」的 MAC 功能。

如果要判斷您所遭遇的問題是否與 MAC 有關,最簡單的方法是關閉該功能。如果要執行這項操作,請將 enableViewStateMac 標記設定為 false。如果您不再遭遇「檢視狀態」的錯誤,則該問題與 MAC 有關。

在安裝 Hotfix 323744 之前,Microsoft .NET Framework 1.0 中所套用的「檢視狀態」MAC 的方式不同。本文告訴您的 Hotfix (Hotfix 832183) 包括了 Hotfix 323744。如果您並未在環境中的所有其他電腦上,單獨安裝或使用 Hotfix 832183 來安裝 Hotfix 323744 ,則未安裝 Hotfix 323744 的電腦將會遭遇「檢視狀態」的資料錯誤。

如需其他詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
323744 FIX:"The View State is invalid for this page and might be corrupted" error message in ASP.NET
328546 INFO:Post-Service Pack 2 .NET Framework ASP.NET Hotfix Package

屬性

文章編號: 832183 - 上次校閱: 2006年4月17日 - 版次: 2.3
這篇文章中的資訊適用於:
  • Microsoft .NET Framework 1.0
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET (2002), Enterprise Architect Edition SP1
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Common Language Runtime (included with the .NET Framework) 1.0
  • Microsoft ASP.NET 1.0
關鍵字:?
kbqfe kbhotfixserver kbnetframe100presp3fix kbfix kbbug KB832183
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com