首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是什么导致了这种“Base-64字符数组的无效长度”

是什么导致了这种“Base-64字符数组的无效长度”
EN

Stack Overflow用户
提问于 2009-05-13 15:52:35
回答 12查看 169.2K关注 0票数 93

我在这里几乎没有什么可谈的。我不能在本地复制它,但当用户收到错误时,我会收到一个自动的电子邮件异常通知:

代码语言:javascript
复制
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()

我倾向于认为分配给视图状态的数据存在问题。为例:

代码语言:javascript
复制
List<int> SelectedActionIDList = GetSelectedActionIDList();
ViewState["_SelectedActionIDList"] = SelectedActionIDList;

如果不能在本地重现错误,就很难猜测错误的来源。

如果任何人对这个错误有过任何经验,我真的很想知道你发现了什么。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-05-13 16:04:16

我见过这种错误是由大小良好的视图状态和过度激进的内容过滤设备/防火墙(尤其是在处理K-12教育机构时)的组合造成的。

我们通过在SQL Server中存储视图状态来解决这个问题。在执行此操作之前,我建议您尽量限制viewstate的使用,方法是不在其中存储任何较大的内容,并对所有不需要它的控件关闭它。

在SQL Server中存储ViewState的参考资料:

MSDN - Overview of PageStatePersister

ASP Alliance - Simple method to store viewstate in SQL Server

Code Project - ViewState Provider Model

票数 38
EN

Stack Overflow用户

发布于 2010-03-16 18:52:13

在urlDecode处理文本后,它将所有'+‘字符替换为’‘...这样就产生了错误。您只需调用此语句即可使其再次兼容base64:

代码语言:javascript
复制
        sEncryptedString = sEncryptedString.Replace(' ', '+');
票数 84
EN

Stack Overflow用户

发布于 2009-05-13 16:04:55

我的猜测是,有些东西要么编码或解码得太频繁了--要么你的文本中有多行。

Base64字符串的长度必须是4个字符的倍数-每4个字符代表3个字节的输入数据。不知何故,ASP.NET传回的视图状态数据被破坏了-长度不是4的倍数。

发生这种情况时,您会记录用户代理吗?我想知道是不是某个地方的浏览器表现不佳...另一种可能性是,有一个代理在做淘气的事情。同样,尝试记录请求的内容长度,这样您就可以了解是否只有大型请求才会发生这种情况。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/858761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档