使用Microsoft Graph SDK 1.4 NuGet的增量查询

Chr*_*lle 1 microsoft-graph

我正在尝试使用.NET客户端库(来自https://www.nuget.org/packages/Microsoft.Graph的 1.4版)设置一个增量查询示例。进行初始调用很顺利:

var page = await _graphClient.Users.Delta().Request().GetAsync();

while (page.NextPageRequest != null)
{
  page = await page.NextPageRequest.GetAsync();
}
Run Code Online (Sandbox Code Playgroud)

一段时间后获得deltaLink仍然很明显:

string deltaLink = (string)page.AdditionalData["@odata.deltaLink"];
Run Code Online (Sandbox Code Playgroud)

但是,以后使用此deltaLink的正确方法是什么?我还没有找到明显的方法/构建器,该方法/构建器将允许我以后使用URL继续运行(我当前的解决方案是使用https: //“使用.Net Microsoft Graph客户端库发送HTTP请求”部分中的代码: //github.com/microsoftgraph/msgraph-sdk-dotnet/blob/dev/docs/overview.md并将其投放到UserDeltaCollectionResponse-那时我可以再次使用普通的API)。

小智 8

我编写了一些代码来获取实际的 delta 令牌字符串。

 Uri deltaUri = new Uri(delta.AdditionalData[deltaLinkKey].ToString());
 var queries = System.Web.HttpUtility.ParseQueryString(deltaUri.Query);
 string token = queries.Get("$deltatoken");
Run Code Online (Sandbox Code Playgroud)

API 中有一个 QueryOption 对象,您可以将其添加到请求中。所以,你上面的代码看起来像这样。

QueryOption deltaOption = new QueryOption("$deltaToken", deltaToken);
var page = await _graphClient.Users.Delta().Request(new[] { deltaOption }).GetAsync();
Run Code Online (Sandbox Code Playgroud)


小智 5

你是对的; 当前,没有一种优雅的方法可以将增量链接用作新请求的基础。您将需要自己保存它并创建一个自定义HTTP请求:

HttpRequestMessage hrm = new HttpRequestMessage(HttpMethod.Get, deltaLink);
await graphClient.AuthenticationProvider.AuthenticateRequestAsync(hrm);
HttpResponseMessage response = await graphClient.HttpProvider.SendAsync(hrm);
Run Code Online (Sandbox Code Playgroud)

如果您希望在同一应用程序实例中再次使用它,则可以更轻松地使用它:

driveItemDeltaCollectionPage.InitializeNextPageRequest(graphClient, deltaLink.ToString());
driveItemDeltaCollectionPage = await driveItemDeltaCollectionPage.NextPageRequest.GetAsync();
Run Code Online (Sandbox Code Playgroud)

此库上当前存在一个未解决的问题,可以为增量链接添加更直观的支持。