C#编写的WebApi接口直接返回byte数组引发的问题

如下面代码所示,C#编写的WebApi接口,本意是不做任何处理,直接将服务端生成的byte数组发送给客户端,但是在客户端接收时,无论是以字节数组形式接收,还是以字符串形式接收再解码都无法还原服务端发送的数据(如截图所示),如果是以字符串形式接收后将前面和后面的引号去掉再以base64解码则可以得到正确的字符串。

csharp 复制代码
// 服务端代码
[HttpGet]
public byte[] GetBytes()
{ 
    byte[] bytes = new byte[5];
    bytes[0]= 0xFF;
    bytes[1] = 0x01;
    bytes[2] = 0x02;
    bytes[3] = 0x03;
    bytes[4] = 0x04;

    return bytes;
}

客户端代码
byte[] result=client.GetByteArrayAsync(@"http://localhost:51789/EasyCaching/GetBytes").Result;
string strResult= client.GetStringAsync(@"http://localhost:51789/EasyCaching/GetBytes").Result;
byte[] resultBytes=Convert.FromBase64String(strResult.Trim('"'));


  通过百度问题及查阅资料,定位问题为ASP.NET Code编写的WebApi接口默认将结果封装为json格式返回客户端,如果要将byte数组发送给客户端,可以采用以下2种方式(更多方式请自行百度或者咨询大模型):
  1)以文件流形式返回数组;

csharp 复制代码
[HttpGet]
public IActionResult GetBytes()
{
    byte[] bytes = new byte[5];
    bytes[0] = 0xFF;
    bytes[1] = 0x01;
    bytes[2] = 0x02;
    bytes[3] = 0x03;
    bytes[4] = 0x04;

    return File(bytes, "application/octet-stream");            
}

2)以base64形式将byte数组编码为字符串发送给客户端,客户端接收字符串后再解码:

csharp 复制代码
[HttpGet]
public ActionResult<string> GetBytes()
{
    byte[] bytes = new byte[5];
    bytes[0] = 0xFF;
    bytes[1] = 0x01;
    bytes[2] = 0x02;
    bytes[3] = 0x03;
    bytes[4] = 0x04;

    return Convert.ToBase64String(bytes);           
}
相关推荐
程序员老乔5 小时前
Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(二):Valhalla落地,值类型如何让电商DTO内存占用暴跌
java·spring boot·c#
祝大家百事可乐5 小时前
嵌入式——02 数据结构
c++·c#·硬件工程
我是唐青枫6 小时前
深入理解 C#.NET TaskScheduler:为什么大量使用 Work-Stealing
c#·.net
唯情于酒7 小时前
net core web api 使用log4net
c#·.net core
SunnyDays10118 小时前
C# 实战:快速查找并高亮 Word 文档中的文字(普通查找 + 正则表达式)
开发语言·c#
人工智能AI技术8 小时前
Qwen3.5-Plus登顶|C#集成通义千问,高并发服务实战优化
人工智能·c#
SunnyDays10119 小时前
如何使用 C# 在 Word 文档中插入超链接 (含文本与图片链接)
开发语言·c#
一念春风9 小时前
证件照制作工具(WPF C#)
c#·wpf
似水明俊德17 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
阿蒙Amon19 小时前
C#常用类库-详解SerialPort
开发语言·c#