10

ASP.NET でのこの例外の原因は何ですか? 明らかにビューステートの例外ですが、例外をスローしているページ (ボタンとナビゲーション リンクを備えた単純な 2 つの TextBox フォーム) でエラーを再現できません。

FWIW、私は Web ファームを運営していません。

例外

エラー メッセージ: データを検証できません。

エラー ソース: System.Web

エラー ターゲット サイト: Byte[] GetDecodedData(Byte[], Byte[], Int32, Int32, Int32 ByRef)

投稿データ

ビューステート:

/wEPDwULLTE4NTUyODcyMTFkZF96FHxDUAHIY3NOAMRJYZ+CKsnB

イベント検証:

/wEWBAK+8ZzHAgKOhZRcApDF79ECAoLch4YMeQ2ayv/Gi76znHooiRyBFrWtwyg=

例外スタック トレース

   at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
   at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
   at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState)
   at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
   at System.Web.UI.HiddenFieldPageStatePersister.Load()
   at System.Web.UI.Page.LoadPageStateFromPersistenceMedium()
   at System.Web.UI.Page.LoadAllState()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at ASP.default_aspx.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

~ ウィリアム・ライリー・ランド

4

8 に答える 8

18

このエラーの原因として最も可能性が高いのは、すべてのビューステートが読み込まれる前にポストバックが停止された場合 (ユーザーが [停止] または [戻る] ボタンを押す)、ビューステートが検証に失敗し、エラーがスローされることです。

その他の潜在的な原因:

  • ビューステートが生成されてからユーザーがそれをサーバーにポストするまでの間に、アプリケーション プールがリサイクルされます (可能性は低い)。
  • machineKeys が同期されていない Web ファーム (問題ではありません)。

更新:この問題に関する Microsoft の記事。上記に加えて、他に 2 つの潜在的な原因が示唆されています。

  • ファイアウォール/ウイルス対策ソフトウェアによるビューステートの変更
  • ある aspx ページから別のページへの投稿。
于 2008-09-26T16:21:46.500 に答える
9

.NET 3.5 SP1 では、RenderAllHiddenFieldsAtTopOfFormプロパティが PagesSection 構成に追加されました。

Web.config

<configuration>

    <system.web>

        <pages renderAllHiddenFieldsAtTopOfForm="true"></pages>

    </system.web>

</configuration>

興味深いことに、これのデフォルト値は true です。したがって、本質的に、.NET 3.5 SP1 を使用している場合、ViewState はフォームの上部に (ページの残りの部分が読み込まれる前に) 自動的にレンダリングされるため、表示される ViewState エラーは解消されます。

于 2008-10-31T19:08:29.953 に答える
6

Safari 3の特定のバージョンで問題が発生しました。私の解決策は、ViewStateをフォームの先頭に移動することでした(Pageクラスを拡張し、3.5SP1より前または.Net3.5SP1以降のRenderメソッドを上書きしましたこれはデフォルトで行われます)、ViewStateを1つのモンスターファイルではなく複数の異なるフィールドに分割します。ASP.NET 2.0のViewStateチャンキング(maxPageStateFieldLength)を参照してください

于 2008-09-26T17:00:59.870 に答える
4

この無料のオンライン ツール: http://aspnetresources.com/tools/machineKeyは、web.config ファイルの system.web 要素の下に machineKey 要素を生成します。これが生成するものの例を次に示します。

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

これが web.config に表示されると、エラー自体が突然意味をなします。あなたが得ているエラーは言う

「構成で同じvalidationKeyと検証アルゴリズムが指定されていることを確認してください」。

この machineKey 要素を見ると、何について話しているのかがすぐにわかります。


この値を web.config に "ハード コーディング" することで、サーバー ファーム内のどのサーバーがそれを取得しても、asp.net がビューステートのシリアル化と逆シリアル化に使用するキーは変わりません。暗号化が「ポータブル」になり、ビューステートが「ポータブル」になります。

また、任意のレベルでのリセットによって消去されたために、何らかの理由でキーを「忘れた」場合、まったく同じサーバー(ファーム内ではない) がこの問題を抱えている可能性があると推測しています。これがおそらく、アイドル期間の後にこのエラーが表示され、「古い」ページを使用しようとする理由です。

于 2011-08-23T03:31:49.597 に答える
3

私の Web サイトでこの問題の原因を突き止め、最終的に解決することができました。これはあなたの質問に対する直接的な回答ではありませんが、この小さな情報を共有したいと思いました。

過去に、私はすべて (上記の Jeffaxe によって提案された解決策を含む) を試しましたが、結果はありませんでしenableViewStateMac="false"た。

私の場合、問題の原因は何ですか? この問題は、Web サイトの特定のページでIntelligencia.UrlRewriter (バージョン 2.0 RC 1 ビルド 6) モジュールを使用したために発生しました。SEO に適したリンクをいくつか使用していたため、ViewState の検証エラーが発生していました。「通常の」リンク (SEO に適したリンクではなく) を使用すると、問題はなくなりました。

誤報ではないことを確認するために、問題を数回再現しました (私は ASP.NET 3.5 を使用しています)。

上記のモジュールを使用していないにもかかわらず、このエラーが発生する場合があります。これは、原因が別のものであることを意味します。少なくとも、この経験を共有することは、一部の人にとって役立つかもしれません.

于 2010-06-03T04:21:36.377 に答える
3

「すべてのビューステートが読み込まれる前にポストバックが停止されました」

私は以前にこの正確な問題を抱えていましたが、これが原因でした。

最初に ViewStateMac プロパティ (ディレクティブenableViewStateMac="false"内) を無効にしpageて解決しましたが、これは問題の真の解決策ではなく、データの整合性を脅かす可能性があります。最終的には、ページが完全に読み込まれるまで送信ボタンを無効にし、一部のコントロールでビューステートを無効にしてビューステートのサイズをトリミングすることで、この問題を解決しました。

于 2008-09-26T19:27:36.977 に答える
2

ページにアクション属性のないフォーム タグを設定したときにこのエラーが発生し、コード ビハインドでフォームのアクション属性を「Action.aspx」に変更しました。

そして JavaScript で、フォーム (theForm.submit();) を送信しました。

私の場合、それはセキュリティ上の問題であり、ページに既に設定されている後はこれを変更できないと思います... ?

于 2009-04-02T21:07:54.483 に答える
1

これが誰かに役立つかどうかはわかりませんが、私の解決策は、webconfig で machineKey を除外して、Cookie を渡すことでした。

于 2011-01-11T13:52:10.660 に答える