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

从Outlook Office REST API获取联系人计数-Javascript,javascript,outlook,msdn,outlook-restapi,Javascript,Outlook,Msdn,Outlook Restapi,我很难区分微软荒谬的大量相互冲突的API文档:outlook.office.com、outlook.office365.com、microsoftgraph、Azure等等 我已经成功地进行了身份验证并提取了联系人,但我似乎无法获得一个计数来知道何时应该停止分页 我一直在使用: Access Token url: https://login.microsoftonline.com/common/oauth2/v2.0/token; Successful Contact url:

我很难区分微软荒谬的大量相互冲突的API文档:outlook.office.com、outlook.office365.com、microsoftgraph、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;
他们说我只需打个电话到
https://outlook.office.com/api/v2.0/me/contacts/$count
但这会继续返回正文为
-1
的明文MIME类型

如果有人曾经为此奋斗过,或者知道发生了什么,我会很感激在正确的方向上有一点——希望你能得到一些简单的观点


编辑:感谢下面的Jason对我们的帮助。通过使用沙箱,我能够用以下内容重现问题:

登录到我的帐户->收到访问令牌->打了一个获取电话到
https://outlook.office.com/api/v2.0/me/contacts/$count

请求头:

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]
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: 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
,即使它返回有效的联系人数组


第三次编辑:工作版本(使用与上述错误相同的方法) Url:$count

请求头:

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]
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
呼叫返回的是一个负数。如果您转到并使用您的帐户登录,您会从该呼叫中得到相同的结果吗

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

分页由页面大小(
$top
参数)和“游标”(
$skip参数)控制。如果您在没有参数的情况下调用
/me/contacts
,则默认页面大小为10,默认游标为0。您可以使用
$top`参数每页请求更多结果

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

"@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
值。因此,您可以使用该值作为停止分页的指示器。

感谢您将我指向该沙箱。看到我使用的是相同的身份验证路径(基于URL),这让人放心作为沙盒。我第一次尝试它时,它返回了一个计数,但随后的几次尝试也产生了
-1
!不确定触发失败的公共线程是什么…在相关说明中,感谢您对分页的帮助,我担心这会限制我只能向前和向后,我想如何设置允许用户从第1页跳到第4页的页码,但我需要知道第4页实际存在。是的,在这种情况下,您需要计数。如果您可以在沙箱中复制它,您介意发布完整的响应(包括标题)吗?我想让我们的开发人员运行它。是的,它似乎有点碰运气。我的应用程序成功地获得了大约2次呼叫的计数,然后返回到
-1
,没有任何更改。我也可以让沙盒偶尔失败。响应太长,无法放入注释,因此我将对问题进行编辑。嗨,Jason,不确定你是否仍在关注我我的一个API现在返回404,甚至沙箱也给了我```获取HTTP/1.1用户代理:PlayGroundAgent/1.0授权:承载者{访问令牌}客户端请求id:{请求}X-AnchorMailbox:censored@email.com``x-ms-diagnostics:2000005;原因='由令牌中的用户上下文指定的用户不存在。“error\u category=“invalid\u user”