如何解决Byte[] 在 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 处理它的预期方法是什么?
解决方法
为什么以及在哪里进行 base64 编码?
因为 JSON 基本上不支持二进制数据。 JSON 文档是 UTF-8 编码的文本,因此如果不使用某种二进制到文本编码(例如 base64),则无法表示任意二进制数据 - 而 base64 是迄今为止最常用的方法。
基本上,为了创建有效的 JSON,这是完全合理的。
我建议使用 byte
格式而不是 binary
格式 - 看起来 binary
实际上旨在包含任意八位字节,但包含在 JSON 中的那些会创建无效的 JSON(以及导致关于如何表示数据结尾的明显问题)。 byte
格式为 explicitly documented as being in base64,因此我希望它是便携式解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。