OneDrive API可恢复上传网址无响应

时间:2017-08-23 03:55:35

标签: c# file-upload microsoft-graph

我一直在开发OneDrive桌面客户端应用程序,因为内置于Windows中的应用程序因我无法理解的原因而失败了。我通过HttpClient在C#中使用REST API。

对onedrive端点的所有请求都能正常工作(下载,上传小文件等)并上传大文件直到最近(大约两天前)工作正常。我获取上传会话URL并开始向其上传数据,但在成功上传两个块(202响应)后,第三个请求超出了时间(通过HttpClient),是否为{{1获取状态,或GET上传数据。用于创建会话的PUT仍然有效。

我尝试过:获取一个新的POST,登录到一个新的Microsoft帐户,将代码恢复到已知的工作状态,并重新克隆git存储库。

在PostMan中,我可以完成创建会话和上传块的整个过程,但不会遇到此问题,但如果我采用我的应用程序从OneDrive API检索的上传URL并尝试ClientId数据在PostMan中,服务器没有响应(除非请求无效,否则它有时会告诉我)。对此网址的后续PUT请求也不会做出响应。

以下是验证后转到OneDrive API的所有请求的日志:https://pastebin.com/qRrw2Sb5

以下是相关代码:

GET

所有内容都符合评论所说的内容或名称所暗示的内容,但很多方法/类都是我自己的,所以我很乐意解释任何可能不明显的内容。

我完全不知道发生了什么,并希望得到任何帮助。我在星期六回到学校之前试图完成这项工作,并且没有时间去研究它。

编辑:等待一段时间后,可以通过PostMan再次向上传网址发出请求。

编辑2:我无法再在Postman中复制这种超时现象。无论是从我的应用程序获取上传URL,还是从另一个Postman请求获取上传URL,以及上传是否在我的应用程序中停滞,我似乎都可以通过Postman上传我想要的所有片段。

编辑3:此无响应行为在读取内容流之前开始。

编辑4:在WireShark上查看数据包信息,前两个块几乎完全相同,但只有"重新发送"数据包出现在第三个。

1 个答案:

答案 0 :(得分:0)

因此,在经过3周不同程度的测试之后,我终于找到了问题,它几乎与OneDrive Graph api无关。问题在于,在发出Http请求时,我正在使用HttpCompletionOption.ResponseHeadersRead,但在发送下一个响应之前没有读取响应。这意味着HttpClient阻止我发送更多请求,直到我读取旧请求的响应。这很奇怪,因为它允许我在锁定之前发送2个请求。