我正在尝试使用.NET客户端库(来自https://www.nuget.org/packages/Microsoft.Graph的1.4版)设置delta查询示例。初始调用顺利进行:
var page = await _graphClient.Users.Delta().Request().GetAsync();
while (page.NextPageRequest != null)
{
page = await page.NextPageRequest.GetAsync();
}
在一段时间后获取deltaLink仍然非常明显:
string deltaLink = (string)page.AdditionalData["@odata.deltaLink"];
但是以后使用此deltaLink的正确方法是什么?我没有找到明显的方法/构建器,允许我稍后使用URL继续(我当前的解决方案是使用“{NetPC客户端库发送HTTP请求”部分中的代码{{ 3}}并将事物转换为UserDeltaCollectionResponse - 此时我可以再次使用普通的API。)
答案 0 :(得分:4)
你是对的;目前,没有优雅的方法可以使用增量链接作为新请求的基础。您需要自己保存并创建自定义HTTP请求:
HttpRequestMessage hrm = new HttpRequestMessage(HttpMethod.Get, deltaLink);
await graphClient.AuthenticationProvider.AuthenticateRequestAsync(hrm);
HttpResponseMessage response = await graphClient.HttpProvider.SendAsync(hrm);
如果您希望在同一个应用程序实例中再次使用它,则可以更轻松地使用它:
driveItemDeltaCollectionPage.InitializeNextPageRequest(graphClient, deltaLink.ToString());
driveItemDeltaCollectionPage = await driveItemDeltaCollectionPage.NextPageRequest.GetAsync();
此库上目前有open issue可为delta链接添加更直观的支持。
答案 1 :(得分:1)
我写了一些代码来获取实际的增量令牌字符串。
Uri deltaUri = new Uri(delta.AdditionalData[deltaLinkKey].ToString());
var queries = System.Web.HttpUtility.ParseQueryString(deltaUri.Query);
string token = queries.Get("$deltatoken");
然后在API中有一个QueryOption对象,您可以将其添加到请求中。因此,您上面的代码看起来像这样。
QueryOption deltaOption = new QueryOption("$deltaToken", deltaToken);
var page = await _graphClient.Users.Delta().Request(new[] { deltaOption }).GetAsync();