我在使用服务器端分页时遇到问题,利用@odata.nextlink
根据this page中的信息从Microsoft Graph获取下一页数据。我使用原始GET,并在标题中设置了授权令牌(即,我没有使用语言API,我是使用curl从Powershell尝试此操作)。我已经从以下代码段中清除了敏感数据,将其替换为x,但希望有问题的信息会出现。
对于第一个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
对于上面链接的Microsoft Graph文档中的示例,$skiptoken=...
部分具有随机数字,但我的部分有$skiptoken=Paged=TRUE&etc
。自编写文档以来,API可能已经更改了响应,或者我的完全不正确。
我从文档中了解到,我应该能够将此URL用作不透明值,并且可以从Graph 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 :(得分:0)
你是正确的,nextLink应该是一个不透明的URL,它会返回下一组结果。该字符串的格式可能会随着时间的推移而改变,因此您不应尝试解析或以其他方式解释字符串,但用法应该相同。
您收到的回复与空结果一致 - 这意味着没有要列出的其他文件。
您在ReallyBigFolder中有多少结果?如果将顶部设置为不同的值(例如,5?1000?)
会发生什么请注意,@ odata.context描述了结果,但不一定与请求URL相同。你从nextLink回来的@ odata.context与你从初始请求回来的不同吗?应该是一样的......