Byte[]在RESTAPI中作为base64返回

c#

我有一个从 Swagger 自动生成的 API,其中响应对象有一个 binary field MyBinaryMyBinary在 Swagger 中定义为:

MyReponse:
  type: object
  properties:
    MyBinary:
      type: string
      format: binary

这将生成一个 C# 对象:

pubic class MyResponse
{
  public byte[] MyBinary {get;set;}
}

当我在 Postman 中调用这个 EP 时,我看到它MyBinary以 base64 编码的字符串形式返回:

{
  "MyBinary": "....ydCB1bmQgUXVhcms="
}

里面有一个图像。我希望该字段包含类似?PNG ???? IHDR???È???È?.....

为什么以及在哪里进行 base64 编码?我找不到有关该主题的体面 Swagger 描述或 .net 文档。

问题是我们有 3 个 API 客户端:iOS、Android 和 Web。iOS 成功地Data从 Swagger生成类型,并以某种方式设法自动将 base64 加载到其中,但 Android (Java) 和 Web (TypeScript) 抛出异常,表示他们期望二进制文件但收到字符串。

有人可以向我解释一下,为什么 byte[] 在 .net 中被转换为 base64,如果你遇到这种情况,用 Swagger 处理它的预期方法是什么?

回答

为什么以及在哪里进行 base64 编码?

因为 JSON 基本上不支持二进制数据。JSON 文档是 UTF-8 编码的文本,因此如果不使用某种二进制到文本编码(例如 base64),则无法表示任意二进制数据,而 base64 是迄今为止最常用的方法。

基本上,为了创建有效的 JSON,这是完全合理的。

我建议使用byte格式而不是binary格式 - 看起来binary实际上是为了包含任意八位字节,但是将那些包含在 JSON 中会创建无效的 JSON(以及导致关于如何表示数据末尾的明显问题)。该byte格式明确记录为在 base64 中,因此我希望这是便携式解决方案。


以上是Byte[]在RESTAPI中作为base64返回的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>