1. ホーム
  2. .net

[解決済み] "Invalid length for a Base-64 char array "と表示される原因は何ですか?

2023-02-20 06:20:45

質問

私はここに行くために非常に少ないです。私はこれをローカルに再現することはできませんが、ユーザーがエラーを取得すると、私は自動的な電子メールの例外通知を取得します。

Invalid length for a Base-64 char array.

  at System.Convert.FromBase64String(String s)
  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()

viewstateに割り当てられているデータに問題があるのではと思いたいのですが。 例えば

List<int> SelectedActionIDList = GetSelectedActionIDList();
ViewState["_SelectedActionIDList"] = SelectedActionIDList;

ローカルでエラーを再現できないと、エラーの原因を推測することは困難です。

このエラーを経験された方がいらっしゃいましたら、ぜひ教えていただきたいのですが、どういったことがわかったのでしょうか。

どのように解決するのですか?

このエラーは、適切なサイズのビューステートと、積極的すぎるコンテンツ フィルタリング装置/ファイアウォール (特に K-12 教育機関を扱う場合) の組み合わせで発生するのを見たことがあります。

私たちは、ビューステートを SQL Server に格納することで、この問題に対処しました。そのルートに入る前に、ビューステートに大きなものを保存せず、それを必要としないすべてのコントロールでそれをオフにすることによって、ビューステートの使用を制限してみることをお勧めします。

ViewState を SQL Server に格納するためのリファレンス。

MSDN - PageStatePersisterの概要

ASP Alliance - SQL Server にビューステートを格納するためのシンプルな方法

コードプロジェクト - ViewStateプロバイダモデル