【问题标题】:Microsoft Graph download file content returns 404Microsoft Graph 下载文件内容返回 404
【发布时间】:2016-11-03 19:58:02
【问题描述】:

我尝试使用 Grpah API 下载文件。

使用 API 浏览器测试, https://graph.microsoft.io/en-us/graph-explorer#

运行以下请求,获取文件/文件夹项目信息列表,

https://graph.microsoft.com/v1.0/me/drive/root/children

对于其中一个文件项目,我能够获取项目信息。

https://graph.microsoft.com/beta/me/drive/items/_an_item_id

但以下返回 HTTP 404。

https://graph.microsoft.com/beta/me/drive/items/_an_item_id/content

出现这种症状的原因是什么?

【问题讨论】:

  • /content 请求本身是 404,还是将您 (302) 重定向到然后返回 404 的 URL?
  • 谢谢@Brad,是的,先返回302,然后返回404。找到的位置与文件项的“@microsoft.graph.downloadUrl”信息完全相同。
  • @Brad,是不是因为图形资源管理器不支持重定向?我已经使用守护程序模式对我的 Azure 注册应用程序进行了身份验证,获得了 Auth-Code。我尝试使用“Bearer”HTTP 标头下载“下载 url”中的文件,但它显示 404。如何从该链接下载文件?
  • 您提到了守护程序模式,这是否意味着您正在使用仅限应用令牌的 OneDrive for Business 帐户?
  • @Brad 不确定什么是“仅限应用”令牌,但我尝试了此处描述的“守护程序或服务器应用程序到 Web API”身份验证流程。 azure.microsoft.com/en-us/documentation/articles/… 示例在这里 github.com/Azure-Samples/active-directory-dotnet-daemon 它基本上使用客户端 ID 和客户端密码,仅此而已。

标签: sharepoint office365 microsoft-graph-api onedrive


【解决方案1】:

不支持通过Graph Explorerhttps://graph.microsoft.com/beta/me/drive/items/<itemid>/content端点发起请求。

通过 Grath Explorer 发送到https://graph.microsoft.com/beta/me/drive/items/<itemid>/content 端点的请求以preflight request 的形式发出。服务器以302-Redirect 响应,但由于CORS behavior,预检请求不允许重定向。

这里是如何下载文件的解决方法

以下驱动项资源请求:

https://graph.microsoft.com/beta/me/drive/items/<itemId>

返回 @microsoft.graph.downloadUrl 注释,其中包含文件资源的实际链接。

检索到驱动器项目资源后,对来自 @microsoft.graph.downloadUrl 的 url 执行另一个 GET 请求以返回实际文件。

【讨论】:

  • 谢谢。奇怪,但如果我使用“守护程序或服务器应用程序”类型的访问令牌,它似乎返回 404 下载请求,写在azure.microsoft.com/en-us/documentation/articles/… 但是如果我使用来自以下身份验证流程的访问令牌,它会给我内容数据。 dev.onedrive.com/auth/aad_oauth.htm 后者需要用户登录,我以域的全局管理员用户身份登录。前者不需要用户登录,因为它是守护进程。 AccessToken 类型是否会影响文件下载请求的行为?
  • @Locke 我有同样的问题 (404) 使用“仅应用程序”令牌检索文件。您是否能够在没有用户交互的情况下下载文件?
  • @MartinoBordin 恐怕没有。我想是因为他们有某种级别的认证,在较低的认证级别下,我们不能做很多事情,比如下载内容。
  • @Locke 很遗憾,我们无法通过“守护进程身份验证”使用图形下载内容......无论如何,我已经能够使用共享点凭据和图形返回的 WebUrl 下载它。在这里查看答案:stackoverflow.com/a/23687279/485732
  • 用我的方法我没有任何用户交互..我只是在sharepoint中设置了一个“系统”帐户并在我的“守护进程”中使用它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多