2016-08-18 3 views
0

Ich habe Schwierigkeiten, zwischen der absurden Menge an widersprüchlichen API-Dokumentationen von Microsoft zu unterscheiden: outlook.office.com, outlook.office365.com, Microsoft Graph, Azure und so weiterAnzahl der Kontakte aus Outlook abrufen Office-REST-API - JavaScript

Ich habe erfolgreich authentifiziert und Kontakte gezogen, aber ich kann nicht scheinen zu zählen, wann ich Paginierung stoppen sollte.

Ich habe mit:

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

Ihre REST API Resource sagt, ich sollte einen Anruf zu tätigen, um https://outlook.office.com/api/v2.0/me/contacts/$count zu einfach in der Lage sein, aber dies hält -1 einen Klartext MIME-Typ mit dem Körper zurück.

Wenn jemand schon einmal damit zu kämpfen hat oder weiß was los ist, würde ich mich über einen Punkt in die richtige Richtung freuen - und hoffentlich ein paar einfache Punkte für Sie!


EDIT: Dank Jason unten für seine hilfreiche Unterstützung. Mit der Sandbox ich in der Lage war, das Problem mit dem folgenden zu reproduzieren:

Gespeichert in meinem Konto -> Empfangene Zugriffstoken -> Made einen GET-Aufruf https://outlook.office.com/api/v2.0/me/contacts/$count

Anforderungsheader:

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] 

Antwort

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: Es sieht aus wie https://outlook.office.com/api/v2.0/me/contacts?$count=true gibt auch @odata.count": -1 zurück, auch wenn es gültiges Array von Kontakten zurückgibt.


3. Edit: Arbeits Version (gleiche Methode wie die Fehler, die oben verwendet wurde) Url: https://outlook.office.com/api/v2.0/me/contacts/ zählen $

Anforderungsheader:

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] 

Antwort:

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 

Hope diese Hilfe!

Antwort

1

Es tut uns leid zu hören, dass Sie Probleme haben! Es gibt ein paar Dinge hier.

Es ist beunruhigend, dass Sie eine negative Nummer zurück von der $count Anruf erhalten. Wenn Sie zu https://oauthplay.azurewebsites.net gehen und sich mit Ihrem Konto anmelden, erhalten Sie das gleiche Ergebnis von diesem Anruf?

Für Paging, wenn alles, was Sie tun möchten, alle Ergebnisse erhalten, ist es besser, nicht auf den $count Wert zu verlassen.Stattdessen sollten Sie den @odata.nextLink Wert verwenden, der in der Antwort zurückkommt, um die nächste Seite zu erhalten. Natürlich, wenn Sie versuchen, einem Benutzer anzuzeigen, wie viele Seiten vorhanden sind, bevor Sie alle Ergebnisse erhalten, ist der $count der Weg, dies zu tun.

Paging von der Seitengröße (der $top Parameter) und dem "Cursor" (die $skip parameter). If you're making a call to/me/Kontakte with no parameters, then you're getting the default page size of 10 and default cursor of 0. You can use the $ top` Parameter anfordern weitere Ergebnisse pro Seite gesteuert wird.

Der @odata.nextLink Wert wird immer Rückkehr eine URL können Sie die nächste Seite auf der Grundlage der Seitengröße in $top angegeben (oder 10, wenn Sie nicht angeben) erhalten verwenden, um den Wert zu tun GET https://outlook.office.com/api/v2.0/me/contacts hier:.

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

Damit springt die Sie vor 10 (basierend auf dem Standard Seitengröße von 10).

Und hier ist der Wert von 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" 

Wenn es keine weiteren Seiten, der @odata.nextLink Wert wird in der Antwort nicht vorhanden sein. Sie können das also als Indikator verwenden, um den Seitenwechsel zu stoppen.

+0

Danke für das Zeigen auf diese Sandbox. Es ist beruhigend zu sehen, dass es aussieht, als ob ich den gleichen Authentifizierungspfad (basierend auf den URLs) wie die Sandbox verwende. Das erste Mal, als ich es ausprobierte, ja, es gab eine Zählung zurück, aber ein paar nachfolgende Versuche produzierten auch die "-1"! Nicht sicher, was der gemeinsame Faden noch ist, der den Fehler auslöst ... Zu einem verwandten Hinweis, danke für Ihre Hilfe bei der Paginierung, meine Sorge ist, dass dies mich nur vorwärts und rückwärts beschränkt, ich möchte Seite zeigen Zahlen, die es einem Benutzer erlauben würden, von Seite 1 nach 4 zu springen, aber ich müsste wissen, dass Seite 4 tatsächlich existiert. – SuperSephy

+0

Ja, in diesem Fall würden Sie die Zählung benötigen. Wenn Sie es in der Sandbox reproduzieren können, würde es Ihnen etwas ausmachen, die vollständige Antwort (einschließlich Header) zu posten? Ich würde es gerne von unseren Entwicklern ausführen. –

+0

Ja, es scheint ein bisschen hit and miss. Meine App hat es geschafft, die Zählung für ungefähr 2 Anrufe zu erhalten, und dann zurück zu "-1", ohne irgendwelche Änderungen. Ich kann die Sandbox gelegentlich auch zum Absturz bringen. Antworten sind zu lang, um in Kommentare zu passen, daher werde ich die Frage bearbeiten. – SuperSephy

Verwandte Themen