Dot-Net

導致此“Base-64 字元數組的長度無效”的原因

  • May 13, 2009

我在這裡幾乎沒有什麼可做的。我無法在本地重現此內容,但當使用者收到錯誤消息時,我會收到自動電子郵件異常通知:

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()

我傾向於認為分配給視圖狀態的數據存在問題。 例如:

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

如果無法在本地重現錯誤,則很難猜測錯誤的來源。

如果有人對此錯誤有任何經驗,我真的很想知道您發現了什麼。

我已經看到這個錯誤是由大小合適的視圖狀態和過度激進的內容過濾設備/防火牆(尤其是在與 K-12 教育機構打交道時)的組合引起的。

我們通過將 Viewstate 儲存在 SQL Server 中來解決這個問題。在走這條路之前,我建議嘗試通過不在其中儲存任何大的東西並為所有不需要它的控制項關閉它來限制您對視圖狀態的使用。

在 SQL Server 中儲存 ViewState 的參考資料:

MSDN - PageStatePersister

ASP 聯盟概述 - SQL Server 程式碼項目中儲存視圖狀態的簡單方法

- ViewState Provider Model

在 urlDecode 處理文本後,它將所有 ‘+’ 字元替換為 ’ ’ …因此出現錯誤。您應該簡單地呼叫此語句以使其再次兼容 base 64:

       sEncryptedString = sEncryptedString.Replace(' ', '+');

引用自:https://stackoverflow.com/questions/858761