OneDrive API - 大多数时候在尝试获取文件内容时找不到文件

OneDrive API - Getting File Not Found most of the time when attempting to get file contents

我们收到大量文件未找到错误。调用 API 时,我们获得文件的机会很小。我们在生产中遇到了这个问题,它正在影响客户。这是昨天早些时候开始的。几个月来我们一直在调用这个 api 没有问题。这是我们正在使用的API。

https://TENANT-my.sharepoint.com/_api/v2.0/drives/DRIVE_ID/items/FILE_ID/content

使用 Postman,响应如下。该文档已正确共享并已存在数月之久。我们这边没有任何变化。

抱歉,出了点问题 抱歉,您无法访问此文档。请联系与您分享它的人。 技术细节

解决 Microsoft SharePoint Foundation 问题。 关联 ID:fb6bbf9d-d0d6-2000-cdd6-ef99686d513f

日期和时间:2016 年 9 月 12 日 9:13:02 上午

我们在使用 C#/.NET SDK 时遇到同样的问题,但出现 ItemNotFound 错误和 'Microsoft.Graph.ServiceException'。这是在 MS 于 12 月 7 日对 OneDrive 进行更新后开始的。我们与 O365/OneDrive 团队开了一张支持票。他们说他们不知道推出时有任何问题,并说我们需要联系 API 支持。奇怪的是它有时会起作用,也许 100 次尝试中有 2 次。列出文件和上传仍然有效,但下载失败。

这是我们目前已经尝试过的方法:

  • 来自 GitHub 的最新示例项目,同样的错误
  • 检查 SharePoint 中的设置以了解可能影响此设置的新设置,none 发现
  • 在 Azure AD 中重新注册应用程序
  • 增加了 Azure AD 中的应用程序权限

失败的代码行是:

var stream = await this.oneDriveClient.Drive.Items[item.Id].Content.Request().GetAsync();

问题与身份验证有关。这段代码似乎可以修复它:

            var adalAuthProvider = new AdalAuthenticationProvider(
                    this.AadClientId,
                    this.AadReturnUrl);

            this.oneDriveClient = new OneDriveClient(this.AadTargetUrl + "/_api/v2.0", adalAuthProvider, new HttpProvider(new HttpClientHandler { AllowAutoRedirect = true }, true));
            authTask = adalAuthProvider.AuthenticateUserAsync(this.AadTargetUrl);

            try
            {
                await authTask;
            }

虽然这不能解释 API 损坏的方式或原因,但在撰写本文时,OneDrive 尚未确认或修复原始问题,我们的解决方案是使用来自 @contentDownloadUrl 的值文件的元数据并在未经授权 header.

的情况下调用 url

文档当前状态:

"Pre-authenticated download URLs are only valid for a short period of time (a few minutes) and do not require an Authorization header to download."

这里不应该说"do not require",而是"must not include",这样会更清楚。我已经向他们的文档发出了拉取请求。