【问题标题】:Invalid Length for a Base-64 char array or string - can't resolveBase-64 字符数组或字符串的长度无效 - 无法解析
【发布时间】:2015-12-06 21:27:36
【问题描述】:

早上好。我在担任 IT 职位时继承了一个程序,而且我不是很精通 SQL/VB。

另外,我在网上研究过这个错误,但在尝试他们的解决方案时,我仍然得到错误。

这是我收到的错误:

消息:Base-64 字符数组或字符串的长度无效。资源: mscorlib 方法:FromBase64_Decode 行:0 列:0 案例:
案例 ID:0 活动选项卡:0 上次活动选项卡:0 当前列表 ID:0

堆栈跟踪:在 System.Convert.FromBase64_Decode(Char* startInputPtr, Int32 inputLength, Byte* startDestPtr, Int32 destLength) 在 System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength) 在 System.Convert.FromBase64String(String s)
在 System.Web.UI.ObjectStateFormatter.Deserialize(字符串输入字符串, 目的目的)在 System.Web.UI.Util.DeserializeWithAssert(IStateFormatter2 格式化程序, String serializedState,Purpose purpose) at System.Web.UI.HiddenFieldPageStatePersister.Load()

我相信它来自 VB Studio 2012 中此示例代码的 UrlDecode:

Case "CaseSetup"
hlCaseSetupLink.Text = getShortFileNameFromPath(sPath)
hlCaseSetupLink.NavigateUrl = "File:///" & sPath
hlCaseSetupLink.NavigateUrl = HttpUtility.UrlDecode(hlCaseSetupLink.NavigateUrl)
updateCaseSetup()

就在最后一行 updateCaseSetup() 之前,我插入了以下代码来补偿 UrlDecode 创建的任何空格,并使用加号来保持 Base-64 兼容性:

hlCaseSetupLink.NavigateUrl = Replace(hlCaseSetupLink.NavigateUrl, " ", "+")

另外,作为参考,这段代码用于在我使用的自定义程序中创建的 8 个选项卡,并且重复了 8 次,但代码中的选项卡名称不同。

这对任何人都有意义吗?

感谢大家的宝贵时间。非常感谢。

【问题讨论】:

  • 嗯,您向我们展示的内容根本不像 SQL 代码,也不是来自 SQL Server 的错误,AFAIK。请向我们展示更多代码,尤其是关于您正在做什么以及如何执行的更多上下文。
  • 为混淆道歉,@RBarryYoung,它是利用 SQL Server 2008 信息的 Visual Basic 代码。上下文是一个带有 8 个选项卡的菜单。选择客户后,您有 8 个选项卡可供选择,这些选项卡与客户的具体情况相关。这段代码来自一个子程序,并重复了 7 次,但略有不同。至于附加代码,我不确定您还需要什么。
  • 自上述更改以来,该错误是新的吗?还是在错误开始发生后您进行了更改?
  • 您能告诉我们发生错误时 NavigateUrl 中的内容吗?
  • @RBarryYoung 我仍在尝试查找创建错误通知的原因,但一旦找到,我将包含该值

标签: asp.net vb.net sql-server-2008 visual-studio-2012 base64


【解决方案1】:

看看: What causing this "Invalid length for a Base-64 char array"

urlDecode 处理完文本后,会将所有的 '+' 字符替换为 ' '。要使其再次兼容 base 64,请按照上述解决方案将 ' ' 替换为 '+'。

【讨论】:

  • 谢谢,但这正是我在最初的帖子中所做的。
猜你喜欢
  • 2017-09-21
  • 2019-02-11
  • 2018-01-16
  • 2011-02-24
相关资源
最近更新 更多