Byte[] 在 REST 中作为 base64 返回 API
Byte[] returned as base64 in REST API
我有一个从 Swagger 自动生成的 API,其中响应对象有一个二进制字段 MyBinary
。 MyBinary
在 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 从 Swagger 成功生成 Data
类型,并设法自动将 base64 加载到其中,但是 Android (Java) 和 Web (TypeScript) 抛出异常,表示他们期望一个二进制但收到一个字符串。
有人可以向我解释一下,为什么 byte[] 在 .net 中被转换为 base64,如果您有这种情况,用 Swagger 处理它的预期方法是什么?
Why and where is it base64 encoded?
因为JSON基本上不支持二进制数据。 JSON 文档是 UTF-8 编码的文本,因此如果不使用某种二进制到文本的编码(例如 base64)就无法表示任意二进制数据 - 而 base64 是迄今为止最常用的方法.
基本上,这是完全合理的,为了创建有效的JSON。
我建议使用 byte
格式而不是 binary
格式 - 看起来 binary
实际上是为了包括任意八位字节,但包括 JSON 中的那些创建无效 JSON(以及导致关于数据结尾如何表示的明显问题)。 byte
格式是 explicitly documented as being in base64,所以我希望它是可移植的解决方案。
我有一个从 Swagger 自动生成的 API,其中响应对象有一个二进制字段 MyBinary
。 MyBinary
在 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 从 Swagger 成功生成 Data
类型,并设法自动将 base64 加载到其中,但是 Android (Java) 和 Web (TypeScript) 抛出异常,表示他们期望一个二进制但收到一个字符串。
有人可以向我解释一下,为什么 byte[] 在 .net 中被转换为 base64,如果您有这种情况,用 Swagger 处理它的预期方法是什么?
Why and where is it base64 encoded?
因为JSON基本上不支持二进制数据。 JSON 文档是 UTF-8 编码的文本,因此如果不使用某种二进制到文本的编码(例如 base64)就无法表示任意二进制数据 - 而 base64 是迄今为止最常用的方法.
基本上,这是完全合理的,为了创建有效的JSON。
我建议使用 byte
格式而不是 binary
格式 - 看起来 binary
实际上是为了包括任意八位字节,但包括 JSON 中的那些创建无效 JSON(以及导致关于数据结尾如何表示的明显问题)。 byte
格式是 explicitly documented as being in base64,所以我希望它是可移植的解决方案。