2016-08-18 19 views
0

У меня возникли трудности с различием между абсурдным количеством противоречащих API-документов Microsoft: outlook.office.com, outlook.office365.com, microsoft graph, Azure и т. Д.Получение количества контактов из Outlook Office REST API - Javascript

Я успешно прошел аутентификацию и вытащил контакты, но я не могу понять, когда мне нужно прекратить разбивку на страницы.

Я использую:

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.

Если кто-то боролся с этим раньше или знает, что происходит, я был бы признателен за правильное направление и, надеюсь, несколько простых моментов для вас!


EDIT: Благодаря Джейсону ниже его полезной поддержки. Использование песочницы я был в состоянии воспроизвести проблему со следующим:

Записан на свой счет -> Received токенов доступа -> Сделал GET вызов 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] 

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 Редактировать: Похоже, https://outlook.office.com/api/v2.0/me/contacts?$count=true возвращает @odata.count": -1, даже если он возвращает действительный массив контактов.


третий Edit: Работа версия (Тот же метод был использован в качестве вышеуказанных ошибок) Адрес: https://outlook.office.com/api/v2.0/me/contacts/ $ подсчитывать

заголовков запроса:

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 

Надеюсь, что эта помощь!

ответ

1

Извините, что у вас проблемы! Здесь происходит несколько вещей.

Это вызывает беспокойство, что вы получаете отрицательное число от звонка $count. Если вы перейдете к https://oauthplay.azurewebsites.net и войдите в свою учетную запись, вы получите тот же результат от этого звонка?

Для пейджинга, если все, что вы хотите сделать, это получить все результаты, лучше не полагаться на значение $count.Вместо этого вы должны использовать значение @odata.nextLink, которое возвращается в ответ, чтобы получить следующую страницу. Конечно, если вы пытаетесь указать пользователю, сколько страниц осталось до получения всех результатов, то это способ сделать это $count.

пейджинга контролируется размер страницы (параметр $top) и "курсор" (The $skip parameter). If you're making a call to/Me/контакты 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:.

"@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 не будет присутствовать в ответе. Таким образом, вы можете использовать это как свой индикатор, чтобы остановить пейджинг.

+0

Спасибо, что указал мне на эту песочницу. Удивительно, что похоже, что я использую тот же путь аутентификации (на основе URL-адресов), что и песочница. В первый раз, когда я попробовал это, да, он вернул счет, но несколько последующих попыток также дали «-1»! Не уверен, что общий поток еще вызывает триггер ... В связи с этим, спасибо за вашу помощь в разбивке на страницы, я беспокоюсь, что это ограничивает меня только вперед и назад, я хотел бы показать страницу числа, которые позволят пользователю перейти со страницы 1 на 4, но мне нужно знать, что страница 4 существует. – SuperSephy

+0

Да, в этом случае вам понадобится счет. Если вы можете воспроизвести его в песочнице, не могли бы вы опубликовать полный ответ (включая заголовки)? Я бы хотел запустить его нашими разработчиками. –

+0

Да, кажется, это хит и промах. Моему приложению удалось получить счетчик примерно на 2 вызова, а затем вернуться к '-1' без каких-либо изменений. Я также могу получить Песочницу. Ответы слишком длинны, чтобы вписаться в комментарии, поэтому я сделаю редактирование на вопрос. – SuperSephy