Delta Query使用Microsoft Graph SDK 1.4 NuGet

时间:2017-07-19 14:09:18

标签: microsoft-graph

我正在尝试使用.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。)

2 个答案:

答案 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();