我在这里几乎没有什么可谈的。我不能在本地复制它,但当用户收到错误时,我会收到一个自动的电子邮件异常通知:
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;
如果不能在本地重现错误,就很难猜测错误的来源。
如果任何人对这个错误有过任何经验,我真的很想知道你发现了什么。
发布于 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
发布于 2010-03-16 18:52:13
在urlDecode处理文本后,它将所有'+‘字符替换为’‘...这样就产生了错误。您只需调用此语句即可使其再次兼容base64:
sEncryptedString = sEncryptedString.Replace(' ', '+');
发布于 2009-05-13 16:04:55
我的猜测是,有些东西要么编码或解码得太频繁了--要么你的文本中有多行。
Base64字符串的长度必须是4个字符的倍数-每4个字符代表3个字节的输入数据。不知何故,ASP.NET传回的视图状态数据被破坏了-长度不是4的倍数。
发生这种情况时,您会记录用户代理吗?我想知道是不是某个地方的浏览器表现不佳...另一种可能性是,有一个代理在做淘气的事情。同样,尝试记录请求的内容长度,这样您就可以了解是否只有大型请求才会发生这种情况。
https://stackoverflow.com/questions/858761
复制相似问题