2017-05-17 5 views
0

Ich habe Probleme mit der serverseitigen Paging, mit der , um die nächste Seite von Daten aus Microsoft Graph abrufen, basierend auf den Informationen in this page. Ich verwende rohe GETs, wobei das Autorisierungstoken in der Kopfzeile gesetzt ist (dh ich verwende keine Sprach-API, ich versuche das von Powershell mit curl). Ich habe vertrauliche Daten aus den folgenden Snippets geschrubbt und sie durch x ersetzt, aber hoffentlich kommt die problematische Information rüber.Microsoft Graph NextLink funktioniert nicht

Zum ersten GET, ich Abfrage mit

https://graph.microsoft.com/beta/drives/b!Gxxxxx-xxxxxxge/root:/ReallyBigFolder:/children?top=200 

und ich bekomme eine Antwort mit 200 Einzelteilen, wie erwartet. Das @odata.nextlink Feld in dieser Antwort ist

https://graph.microsoft.com/beta/drives/b!Gxxxxx-xxxxxxge/root/children?top=200&$skiptoken=Paged%3dTRUE%26p_SortBehavior%3d0%26p_FileLeafRef%3d279%252ezip%26p_ID%3d208%26p_FileDirRef%3dMaintenance%2520Department%252fReallyBigFolder%26RootFolder%3dMaintenance%2520Department%252fReallyBigFolder 

Für die Beispiele in der Microsoft Graph Dokumentation über verknüpft, der $skiptoken=... Teil zufällig aussehenden Zahlen, aber ich hat $skiptoken=Paged=TRUE&etc. Vielleicht hat die API die Antwort geändert, seit die Dokumentation geschrieben wurde, oder meine ist völlig inkorrekt.

Mein Verständnis aus der Dokumentation ist, dass ich in der Lage sein sollte, diese URL als undurchsichtiger Wert zu verwenden, und GET es von der Graph API (mit Auth Token natürlich) ohne Änderung. Allerdings, wenn ich dies tun, ist die Antwort

{"@odata.context":"https://graph.microsoft.com/beta/$metadata#drives('b%21Gxxxxx-xxxxxxge')/root/children","value":[]} 

ist, wo ich erwarte weitere 200 Dateien aufgelistet zu bekommen, gibt es keine Dateien überhaupt zurück, und es scheint, den Weg gegangen ist, an die Wurzel zeigen eher als der Unterordner, wie er sein sollte.

Ich habe das auch in Graph Explorer mit den beiden /beta und /v1.0 Endpunkten versucht, und es schlägt auf die gleiche Weise auch dort.

Wohin gehe ich falsch?

Bearbeiten mit Details zum Debuggen: Hinweis: Graph Explorer scheint nicht das Feld Datum aus Headern anzuzeigen, daher verwende ich Postman Chrome Plugin für diese Werte.

erste GET-Anfrage zu

beta/drives/b!xxx-xxxge/root:/Really%20Big%20Folder/ReallyBigFolder:/children 

Mit Response-Header

Cache-Control →private 
Content-Encoding →gzip 
Content-Type →application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 
Date →Fri, 26 May 2017 19:07:54 GMT 
Duration →2033.3889 
OData-Version →4.0 
Transfer-Encoding →chunked 
Vary →Accept-Encoding 
client-request-id →6faf5d1d-a291-410a-b269-f4667187d7cb 
request-id →6faf5d1d-a291-410a-b269-f4667187d7cb 
x-ms-ags-diagnostic →{"ServerInfo":{"DataCenter":"North Central US","Slice":"SliceB","ScaleUnit":"002","Host":"AGSFE_IN_11","ADSiteName":"CHI"}} 

und Nextlink (etwas für die Sicherheit verschleierten)

https://graph.microsoft.com/beta/drives/b!xxx-xxxge/root/children?$skiptoken=Paged%3dTRUE%26p_SortBehavior%3d0%26p_FileLeafRef%3d279%252ezip%26p_ID%3d208%26p_FileDirRef%3dGSH%2520Test%252fMaintenance%2520Department%252fReally%2520Big%2520Folder%252fReallyBigFolder%26RootFolder%3d%252fGSH%2520Test%252fMaintenance%2520Department%252fReally%2520Big%2520Folder%252fReallyBigFolder 

Nach der Nextlink-Header (unveränderte Header weggelassen erzeugt):

Date →Fri, 26 May 2017 19:15:17 GMT 
Duration →512.9537 
client-request-id →6ba61712-a423-4bc8-9376-cc62bf854329 
request-id →6ba61712-a423-4bc8-9376-cc62bf854329 
x-ms-ags-diagnostic →{"ServerInfo":{"DataCenter":"North Central US","Slice":"SliceA","ScaleUnit":"001","Host":"AGSFE_IN_7","ADSiteName":"CHI"}} 

und resultierende Körper:

{ 
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#drives('b%21xxxx-xxxxge')/root/children", 
    "value": [] 
} 
+0

Können Sie den Wert der „Request-ID“ Header und „Date“ Header auf den Antworten sind Sie von MS Graph zu bekommen? So können wir uns die Protokolle anschauen und sehen, was hier vor sich geht. –

+0

@RyanGregg Kopfzeileninformationen, die in einer Bearbeitung der Frage enthalten sind. –

+0

Danke Adam. Ich konnte bestätigen, dass ein Fehler darin besteht, wie nextLink für Abfragen an den Pfad/drives/zurückgegeben wird. Abfragen an/me/drive funktionieren normal. Wir arbeiten an einer Lösung. –

Antwort

0

Sie sind richtig, dass der Nextlink sollte eine undurchsichtige URL sein, dass Sie den nächsten Satz Ergebnisse. Das Format dieser Zeichenfolge kann sich im Laufe der Zeit ändern. Sie sollten daher nicht versuchen, die Zeichenfolge zu analysieren oder anderweitig zu interpretieren, aber die Verwendung sollte identisch sein.

Die Antwort, die Sie bekommen, ist wieder im Einklang mit einem leeren Ergebnis - was bedeutet, dass es keine zusätzlichen Dateien aufzulisten.

Wie viele Ergebnisse haben Sie in ReallyBigFolder? Was passiert, wenn Sie oben einen anderen Wert festlegen (z. B. 5? 1000?)

Beachten Sie, dass der @ odata.context das Ergebnis beschreibt, aber nicht unbedingt mit der Anfrage-URL identisch ist. Ist der @ odata.context, den Sie von nextLink erhalten, anders als der, den Sie von der ersten Anfrage erhalten haben? Es sollte die gleiche sein ...

+0

In diesem Ordner befinden sich 450 Dateien, die zum Testen im PS-Skript durch "Berühren" von Dateinamen in einer Schleife erstellt wurden, also im Wesentlichen 0-Byte-Dateien, aber viele davon. Wenn ich top = 500 mache, dann bekomme ich alle 450 Dateien. Wenn ich top = 5 mache, erhalte ich 5 Ergebnisse, dann versuche ich dem nextLink zu folgen, dann werde ich leer gesetzt. Der @ odata.context in nextLink-Ergebnissen stimmt mit dem in den ursprünglichen Abfrageergebnissen überein. –

+0

Es scheint einige Verwirrung zwischen "serverseitigem Paging" und "clientseitigem Paging" zu bestehen. Clientseitiger Paging ist die Möglichkeit für einen Client, nach einem bestimmten Bereich von Seiten zu fragen. Zum Beispiel erhält top = 200 die ersten 200 Ergebnisse. top = 200 und skip = 200 würden die Ergebnisse 201-400 erhalten. So sollten Sie in der Lage sein, die nächsten 200 Dateien zu erhalten, indem Sie: –

+0

... die URL: http://graph.microsoft.com/beta/drives/b!Gxxxxx-xxxxxxge/root:/ReallyBigFolder:/children? Oben = 200 und überspringen = 200. NextLinks werden verwendet, wenn der Server * * entscheidet, eine Teilmenge des Ergebnisses zurückzukehren. Ich bin nicht sicher, warum Sie einen nextLink bekommen, da Sie alle 200 Datensätze erhalten haben, die Sie angefordert haben (oben = 200); In der Regel würde es nur zurückgegeben, wenn Sie weniger als die angeforderte Anzahl von Datensätzen (sagen wir die ersten 100), in diesem Fall würde der nächste Link (bis zu) die restlichen 100 zurückgeben. So ist es richtig, dass der nächste Link keine Datensätze zurückgibt , aber seltsam, dass es überhaupt enthalten ist. Hilft das? –

Verwandte Themen