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

ASP.NET Core API调用第三方接口返回PDF如何正确实现下载

提问内容

我正在调用第三方API,该接口返回.pdf格式的文件。
我尝试用如下代码实现文件下载:

byte[] fileBytes = Encoding.UTF8.GetBytes(response.Content);
return File(fileBytes, "application/force-download", "Test.pdf");

但该方案仅对部分文件生效,并非所有文件都能正常下载。
感谢大家提供有帮助的解决方案。


解决方案

问题根因

你的实现核心错误是将二进制格式的PDF文件按照UTF-8文本规则做编码转换。PDF属于二进制文件,内部字节不遵循UTF-8编码规范,使用Encoding.UTF8.GetBytes处理会篡改不符合编码规则的字节内容,最终导致文件损坏,这就是为什么只有部分PDF可以正常打开。

修复代码

调用第三方API时不要读取响应的字符串内容,直接读取原始二进制字节即可,示例代码如下(基于HttpClient实现):

// response为调用第三方API返回的HttpResponseMessage对象
byte[] fileBytes = await response.Content.ReadAsByteArrayAsync();
// 使用PDF标准MIME类型,兼容性优于非标准的application/force-download
return File(fileBytes, "application/pdf", "Test.pdf");

优化建议

如果需要处理大体积PDF文件,建议直接读取流返回,避免将全量文件加载到内存中,降低服务内存占用:

Stream pdfStream = await response.Content.ReadAsStreamAsync();
return File(pdfStream, "application/pdf", "Test.pdf");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:06:07