字节[]在REST API中返回为base64



我有一个从Swagger自动生成的API,其中响应对象有一个二进制字段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成功地从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格式被明确地记录为base64,所以我希望它是可移植的解决方案。

最新更新