如何将返回格式为application/pdf的REST响应保存为本地PDF文件
RestSharp请求PDF并本地存储的实现方法
首先修正你现有代码的错误配置:你当前请求的accept头设置为application/json,和接口返回的application/pdf格式不匹配,需要先修改为对应类型,GET请求无需设置content-type头(无请求体时该头无效)。
兼容旧版本RestSharp的实现代码
var client = new RestClient(string.Format(url, ponumber)); var response = client.Get( new RestRequest(Method.GET) .AddHeader("accept", "application/pdf") .AddHeader("authorization", string.Format("Bearer {0}", myToken)) ); // 校验响应成功后直接将原始字节写入本地文件 if (response.IsSuccessStatusCode) { // 替换为你需要的本地存储路径 string savePath = @"C:\自定义存储路径\输出文件.pdf"; File.WriteAllBytes(savePath, response.RawBytes); }
RestSharp v107+ 新版本更简洁的写法
新版本可以直接调用下载方法,无需手动解析响应:
var client = new RestClient(); var request = new RestRequest(string.Format(url, ponumber), Method.Get) .AddHeader("authorization", $"Bearer {myToken}"); // 异步写法,同步场景可替换为DownloadData byte[] pdfBytes = await client.DownloadDataAsync(request); string savePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), $"采购单_{ponumber}.pdf"); await File.WriteAllBytesAsync(savePath, pdfBytes);
注意事项
- 不要将响应内容转成字符串处理,PDF是二进制格式,直接使用原始字节数组写入文件即可,转码会导致文件损坏
- 建议增加响应状态码校验逻辑,避免将接口报错信息写入为无效的PDF文件
内容的提问来源于stack exchange,提问作者Sascha Manns
相关产品推荐
相关产品推荐

