2017-05-17 79 views
0

我在使用服務器端分頁時遇到問題,根據this page中的信息,利用@odata.nextlink從Microsoft Graph中獲取下一頁數據。我正在使用原始GET,在標題中設置授權標記(即,我沒有使用語言API,我正在使用curl從PowerShell中嘗試此操作)。我已經從下面的代碼片段中清除了敏感數據,並用x代替了它們,但希望有問題的信息能夠通過。Microsoft Graph NextLink不工作

對於第一個GET,我查詢與

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

和我得到200個項目的迴應,符合市場預期。在此響應的@odata.nextlink

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 

對於上面鏈接的微軟圖形文檔中的例子中,$skiptoken=...部分具有隨機找數字,但我有$skiptoken=Paged=TRUE&etc。自文檔寫入以來API可能已經改變了響應,或者我的完全不正確。

我從文檔的理解是,我應該能夠使用這個URL作爲一個不透明的值,並從圖形API(當然有auth令牌)獲得它,而無需修改。然而,當我這樣做,響應

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

在哪裏,我在期待獲得中列出的其他200個文件,沒有文件返回可言的,它出現在路走了,指着寧根比它本來應該是的子文件夾。

我也試過這Graph Explorer/beta/v1.0端點,它也以同樣的方式失敗。

我哪裏錯了?

編輯調試細節:注意:圖形瀏覽器似乎沒有顯示標題中的日期字段,所以我使用Postman Chrome插件來獲取這些值。

首先GET請求是

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

隨着響應頭

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"}} 

和NEXTLINK(出於安全略微模糊)

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 

繼NEXTLINK產生省略報頭(不變標頭):

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"}} 

並導致身體:

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

您可以在MS Graph中得到的響應中包含「Request-ID」標題和「Date」標題的值嗎?這將使我們能夠查看日誌並瞭解這裏發生了什麼。 –

+0

@RyanGregg對問題進行編輯時包含的標題信息。 –

+0

謝謝亞當。我已經能夠確認nextLink如何返回查詢到/ drives/path的錯誤。對/我/驅動器的查詢正常工作。我們正在修復。 –

回答

0

你是正確的NEXTLINK應該是您返回下一組結果的不透明URL。該字符串的格式可能會隨着時間而改變,所以您不應該嘗試解析或解釋字符串,但用法應該相同。

您得到的迴應與空結果一致 - 意味着沒有其他文件可以列出。

你在ReallyBigFolder中有多少結果?如果您將頂部設置爲不同的值(例如5?1000?),會發生什麼情況?

請注意,@ odata.context描述了結果,但不一定與請求URL相同。您從nextLink獲取的@ odata.context與您從初始請求中獲取的不同嗎?它應該是相同的......

+0

該文件夾中有450個文件,通過在一個循環中「觸摸」文件名來創建,用於在PS腳本中進行測試,所以它們基本上都是0字節文件,但它們很多。如果我頂部= 500,那麼我得到所有450個文件。如果我頂部= 5,我得到5個結果,然後嘗試跟隨nextLink,然後我得到空集。 nextLink結果中的@ odata.context與原始查詢結果中的匹配。 –

+0

「服務器端分頁」和「客戶端分頁」似乎有些混淆。客戶端分頁是客戶端能夠請求特定範圍的頁面的能力。例如,top = 200會得到前200個結果。 top = 200&skip = 200會得到201-400的結果。所以你應該可以通過使用下面的文件獲得下面的200個文件: –

+0

...網址: http://graph.microsoft.com/beta/drives/b!Gxxxxx-xxxxxxge/root:/ReallyBigFolder:/children?頂部= 200&跳過= 200。 當* server *決定返回結果的子集時使用NextLinks。我不確定爲什麼你得到了nextLink,因爲你得到了你要求的200條記錄(top = 200);通常只有當你得到的記錄數少於要求的記錄數時(比如說第一個100)纔會被返回,在這種情況下,下一個鏈接將返回(最多)剩下的100個。因此,對於下一個鏈接返回沒有記錄,但奇怪的是它包含在內。 這有幫助嗎? –