首页 文章

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

提问于
浏览
0

我很难区分微软荒谬的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 ,但这会继续返回带有正文 -1 的纯文本MIME类型 .

如果有人之前一直在努力解决这个问题,或者知道发生了什么,我会欣赏正确方向的一点 - 并希望为您提供一些简单的观点!


EDIT :感谢Jason的支持 . 使用沙箱,我能够通过以下方式重现该问题:

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

Request Headers:

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]

Response

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

2nd Edit :看起来 https://outlook.office.com/api/v2.0/me/contacts?$count=true 也会返回 @odata.count": -1 ,即使它返回有效的联系人数组也是如此 .


3rd Edit: Working version (使用与上述错误相同的方法)网址:https://outlook.office.com/api/v2.0/me/contacts/ $ count

Request Headers:

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]

Response

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

希望这些帮助!

1 回答

  • 1

    很抱歉听到您遇到麻烦!这里有几件事情 .

    它's troubling that you'从 $count 调用中得到一个负数 . 如果您转到https://oauthplay.azurewebsites.net并使用您的帐户登录,您是否从该电话获得相同的结果?

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

    分页由页面大小( $top 参数)和"cursor"( $skip parameter). If you're making a call to / me / contacts with no parameters, then you're getting the default page size of 10 and default cursor of 0. You can use the $ 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 值 . 因此,您可以将其用作停止分页的指标 .

相关问题