调用返回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
相关产品推荐
相关产品推荐

