使用RestSharp ExecuteAsync获取octet-stream文件内容异常的排查解决
RestSharp 111.2.0 文件下载内容异常问题解决
我使用RestSharp 111.2.0版本,通过以下代码实现文件获取:
internal async Task<byte[]> GetFileAsync(int documentId) { RestRequest request = new RestRequest($"{_apiPath}/document-files/{documentId}", Method.Get); request.AddHeader("Accept", "application/octet-stream"); RestResponse response = await mRestClient.ExecuteAsync(request).ConfigureAwait(true); ErrorHandling(response); return response.RawBytes; }
这段代码逻辑简单,通过ErrorHandling方法完成日志记录等处理,但下载文件时,返回的Content和RawBytes中包含multipart相关头信息,导致文件内容"损坏"。例如返回的PDF内容如下:
--69d36367-8ab0-4b7c-a718-668f7542e836 Content-Type: application/octet-stream Content-Disposition: form-data; name=""; filename="MG Test2.pdf" %PDF-1.7 ... %%EOF --69d36367-8ab0-4b7c-a718-668f7542e836--
实际有效内容应为从%PDF-1.7开始到%%EOF结束的部分。手动截取内容并非合理方案,改用DownloadDataAsync等方法又需要重构错误处理逻辑,成本较高。另外,必须手动添加Accept: application/octet-stream头,否则会触发406错误。
后续排查发现问题根源在上传环节:之前使用Request.AddFile()方法上传文件的方式有误,改用Request.AddParameter()后,文件获取异常的问题彻底解决。
内容的提问来源于stack exchange,提问作者Marcel Grüger
相关产品推荐
相关产品推荐

