Microsoft Graph 驱动器搜索

Posted

技术标签:

【中文标题】Microsoft Graph 驱动器搜索【英文标题】:Microsoft Graph Drive search 【发布时间】:2017-05-16 21:02:53 【问题描述】:

我正在尝试修改 node.js 快速入门示例以生成用户的 excel 文档列表,但我遇到了问题。

此查询在 Graph Explorer 中有效(返回非空结果):

https://graph.microsoft.com/v1.0/me/drive/root/search(q='.xlsx')?select=name,id,webUrl

我尝试了几种方法在 graphHelpers.js 中重现它。 此查询返回空结果:

function getExcelDocs(accessToken, callback) 
  // Get list of excel docs in the user's onedrive
  request
   .get("https://graph.microsoft.com/v1.0/me/drive/root/search(q='.xlsx')?select=name,id,webUrl")
   .set('Authorization', 'Bearer ' + accessToken)
   .end((err, res) => 
     // Returns 200 OK and the search result in the body. 
     callback(err, res);
   );

如果我用驱动器子查询替换搜索 URL,我会返回一组非空文档。

.get('https://graph.microsoft.com/v1.0/me/drive/root/children')

我如何格式化查询 url 有问题吗?

【问题讨论】:

您是否尝试过对 URL 进行编码(即 encodeURIComponent() )? 您建议对 URL 的哪一部分进行编码?显然,如果我对冒号和斜杠进行编码,get 请求将失败。我会尝试编码括号和单引号。 只是查询部分:graph.microsoft.com/v1.0/me/drive/root/… 不幸的是,这返回了错误的请求结果。 我不熟悉这个graphHelpers.js 库,但听起来它可能无法正确处理搜索查询。您有指向 graphHelpers.js 项目的链接吗?不看代码本身就很难判断。 【参考方案1】:

URI 中的括号导致了这里的问题。这些括号中的内容代表请求的body。处理此请求的底层库 (SuperAgent) 似乎不喜欢它们直接进入 URI。

我相信您可以通过单独提供 URL 组件来解决此问题:

request
  .get("https://graph.microsoft.com/v1.0/me/drive/root/search", "q='.xlsx'")
  .query( select: 'name,id,webUrl')
  .set('Authorization', 'Bearer ' + accessToken)
  .end((err, res) => 
      // Returns 200 OK and the search result in the body. 
      callback(err, res);
  );

或者,这也可能有效:

request
  .get("https://graph.microsoft.com/v1.0/me/drive/root/search")
  .query( select: 'name,id,webUrl')
  .send("q='.xlsx'")
  .set('Authorization', 'Bearer ' + accessToken)
  .end((err, res) => 
      // Returns 200 OK and the search result in the body. 
      callback(err, res);
  );

【讨论】:

以上是关于Microsoft Graph 驱动器搜索的主要内容,如果未能解决你的问题,请参考以下文章

获取 Microsoft Graph API 的有效访问令牌

Microsoft Graph API SharePoint 文件搜索

C# 中的 Microsoft Graph 搜索筛选字符串

按元数据/列值的图形API搜索

Microsoft 已弃用交叉签名证书,为 Windows 11 和 10 签署内核驱动程序的新程序是啥?

Microsoft Graph API - 如何将附件上传到列表项