首页 > 解决方案 > 什么会导致 Base64 解码抛出 FormatException

问题描述

我正在使用 C# 和 .NET 对 base64 字符串进行编码和解码。以下是我的代码片段:

Base64 编码:

using (var stream = new MemoryStream())
        …...
    return Convert.ToBase64String(stream.ToArray());
}

Base64 解码

byte[] bytes = Convert.FromBase64String(messageBody);

我的代码在 99% 的情况下都失败了,但有 1% 的机会成功。堆栈跟踪如下:

返回 5xx 错误:System.FormatException:输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非法字符。在 System.Convert.FromBase64_ComputeResultLength(Char inputPtr, Int32 inputLength) 在 System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength) 在 System.Convert.FromBase64String(String s)*

有谁知道什么会导致base64解码失败?我的编码和解码方法是对称的,我真的很困惑这个问题的根本原因是什么?

标签: c#.netbase64

解决方案


感谢你的回复。

结果发现仍然有一些 Json 格式的旧消息之前未能传递并在我们的系统中不断重试;然而,我们接收方的新代码更改已部署,并且我们的接收方开始期待 protobuf 格式的消息,这导致在接收旧的 Json 格式消息时反序列化失败。


推荐阅读