javascript - 从 Outlook Office REST API 获取联系人计数 - Javascript

标签 javascript outlook msdn outlook-restapi

我很难区分 Microsoft 数量惊人的相互冲突的 API 文档:outlook.office.com、outlook.office365.com、microsoft graph、Azure 等等

我已成功验证并拉取联系人,但我似乎无法知道何时应该停止分页。

我一直在使用:

Access Token url: 
    https://login.microsoftonline.com/common/oauth2/v2.0/token;
Successful Contact url: 
    https://outlook.office.com/api/v2.0/me/contacts;

他们的 REST API Resource说我应该能够简单地调用 https://outlook.office.com/api/v2.0/me/contacts/$count 但这会不断返回带有正文的纯文本 MIME 类型-1

如果有人以前曾为此苦苦挣扎或知道发生了什么,我将很感激在正确方向上的观点 - 希望对您来说是一些简单的观点!


编辑:感谢下面的 Jason 提供的有益支持。使用沙箱,我能够通过以下方式重现该问题:

登录到我的帐户 -> 收到访问 token -> 对 https://outlook.office.com/api/v2.0/me/contacts/$count 进行了 GET 调用/p>

请求 header :

GET https://outlook.office.com/api/v2.0/me/contacts/$count HTTP/1.1
Accept: text/*, application/xml, application/json; odata.metadata=none
User-Agent: PlayGroundAgent/1.0
Authorization: Bearer [standard-access-token]
client-request-id: 8f605[client-id-obscured-for-security]7289
X-AnchorMailbox: [email-address-removed-for-security on stackOverflow]

响应

HTTP/1.1 200 OK
Transfer-Encoding: chunked
request-id: de95eaa8-95a7-40bb-b0f9-ced7270f0433
X-CalculatedBETarget: SN1PR05MB1998.namprd05.prod.outlook.com
X-BackEndHttpStatus: 200
OData-Version: 4.0
X-DiagInfo: SN1PR05MB1998
X-BEServer: SN1PR05MB1998
X-FEServer: SN1PR0501CA0035
X-MSEdge-Ref: Ref A: 657E0491C29D46978D8DD3B01B9F93A3 Ref B: DDDD64A109F4E842A8213F038BFDD5FA Ref C: Fri Aug 19 09:20:05 2016 PST
Cache-Control: private
Date: Fri, 19 Aug 2016 16:20:05 GMT
Set-Cookie: exchangecookie=6ca5fc4df96e458e8b879de61aa574ef; expires=Sat, 19-Aug-2017 16:20:05 GMT; path=/; HttpOnly
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET

-1

第二次编辑:看起来 https://outlook.office.com/api/v2.0/me/contacts?$count=true 返回 @odata.count": -1 同样,即使它返回有效的联系人数组也是如此。


第三次编辑:工作版本(使用与上述错误相同的方法) 网址:https://outlook.office.com/api/v2.0/me/contacts/ $计数

请求 header :

GET https://outlook.office.com/api/v2.0/me/contacts/$count HTTP/1.1
Accept: text/*, application/xml, application/json; odata.metadata=none
User-Agent: PlayGroundAgent/1.0
Authorization: Bearer [access-token]
client-request-id: a7954db3-[client-id]-7a6e2e74dd9c
X-AnchorMailbox: [same-email-as-above]

响应:

HTTP/1.1 200 OK
Transfer-Encoding: chunked
request-id: 8c5db16b-3023-4968-9bdc-3d5ecac12ecb
X-CalculatedBETarget: SN1PR05MB1998.namprd05.prod.outlook.com
X-BackEndHttpStatus: 200
OData-Version: 4.0
X-DiagInfo: SN1PR05MB1998
X-BEServer: SN1PR05MB1998
X-FEServer: SN1PR0501CA0019
X-MSEdge-Ref: Ref A: 0574E46DB720491FBCEF23B73428F191 Ref B: FA4529229719F069B9D019E4D53E9200 Ref C: Fri Aug 19 09:42:55 2016 PST
Cache-Control: private
Date: Fri, 19 Aug 2016 16:42:55 GMT
Set-Cookie: exchangecookie=63a1de916a4c48be88569f05ce0361a7; expires=Sat, 19-Aug-2017 16:42:55 GMT; path=/; HttpOnly
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET

29

希望这些帮助!

最佳答案

得知您遇到问题,我们深感抱歉!这里发生了几件事。

令人不安的是您从 $count 调用中得到一个负数。如果你去 https://oauthplay.azurewebsites.net并使用您的帐户登录,您从该调用中得到相同的结果吗?

对于分页,如果只想得到所有的结果,最好不要依赖$count的值。相反,您应该使用响应中返回的 @odata.nextLink 值来获取下一页。当然,如果您试图在获得所有结果之前向用户指示有多少页,$count 就是实现这一目标的方法。

分页由页面大小($top 参数)和“光标”($skip 参数)控制。如果您不带参数调用/me/contacts,那么您将获得默认页面大小 10 和默认光标 0。您可以使用 $top ` 请求每页更多结果的参数。

@odata.nextLink 值将始终返回一个 URL,您可以根据您在 $top 中指定的页面大小(或 10,如果你没有指定)。以下是执行 GET https://outlook.office.com/api/v2.0/me/contacts 的值(value):

"@odata.nextLink": "https://outlook.office.com/api/v2.0/me/contacts/?%24skip=10"

这会跳过 10 个结果(基于默认页面大小 10)。

下面是 GET https://outlook.office.com/api/v2.0/me/contacts/?$top=20 的值:

"@odata.nextLink": "https://outlook.office.com/api/v2.0/me/contacts/?%24top=20&%24skip=20"

如果没有更多页面,@odata.nextLink 值将不会出现在响应中。因此,您可以将其用作停止分页的指标。

关于javascript - 从 Outlook Office REST API 获取联系人计数 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029053/

相关文章:

javascript - “this”关键字如何工作?

outlook - 在 Microsoft Graph/Outlook REST API 中识别 DSN(传递状态通知)或 NDR(未传递报告)和失败的收件人

c++ - 为什么在 IUserNotificationCallback COM 对象上查询 IMarshall 接口(interface)?

javascript - 在 iOS 上使用 Chrome 不会触发图像 onLoad 事件

Javascript 监听两个事件并触发一个函数

outlook - 是否可以在 outlook web 插件应用程序中获取多个选定邮件的数据?

vba - 使用 VBA 访问 Outlook 中的文件夹

c# - WPF/C# - ListBox 示例什么是 ItemsSource

c# - CA1819 : Properties should not return arrays. 此规则是否也适用于其他对象?

javascript迭代算法接受数组中应拒绝的一半分数