You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用返回FileStreamResult的API时遭遇JSON解析错误求助

问题原因与解决方案

这个错误的核心原因是:你的客户端代码默认把API响应当成JSON来解析,但实际API返回的是Excel二进制文件流,JSON解析器处理非JSON的二进制内容时自然会抛出解析错误。Postman能正常工作是因为它会根据响应头的Content-Type自动识别二进制类型,不会强行做JSON解析。

正确的客户端调用方式

如果你的_api是基于HttpClient实现的,应该直接读取响应流,而非尝试反序列化为FileStreamResult对象:

// 示例HttpClient调用逻辑
using var httpClient = new HttpClient();
var response = await httpClient.GetAsync($"你的API地址/GetFile/{id}");
response.EnsureSuccessStatusCode(); // 确保请求返回成功状态码

// 获取二进制文件流并处理
using var excelStream = await response.Content.ReadAsStreamAsync();
// 示例:将流保存到本地文件
using var fileStream = new FileStream($"{id}.xlsx", FileMode.Create);
await excelStream.CopyToAsync(fileStream);

如果你的_api是通过Refit等客户端生成工具定义的,需要修改接口定义,让它直接返回流类型,避免默认的JSON解析:

public interface IApiClient
{
    [Get("/GetFile/{id}")]
    Task<Stream> GetFile(string id);
}

调用时直接获取流并处理:

using var excelStream = await _api.GetFile(id);
// 此处可对流进行保存、读取等操作

额外优化建议

  • 可以把API返回的MIME类型换成Excel文件的标准类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,比通用的application/octet-stream更明确,客户端识别起来更准确
  • 所有流操作务必用using语句包裹,确保资源被正确释放

内容的提问来源于stack exchange,提问作者Sdeeeeeeeeeeee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:45:37