繁体   English   中英

从未在 Azure Active Directory Graph API Delta 调用中收到“@odata.nextLink”

[英]Never receiving "@odata.nextLink" in Azure Active Directory Graph API Delta call

我正在尝试获取 Azure Active Directory 与 C# 的组中的差异。我需要知道何时删除或添加用户。 我用过下面的URL; 来自微软的教程

我已获得此 Azure AD 的授权,我收到了更改,但我还应该收到“@odata.nextLink”或“@odata.deltaLink”。 这可以在您下次检索更改时使用。

有人能帮我吗? 应该是简单的东西吧...

您可以在下面找到我的代码;

`string resource = "https://graph.microsoft.com";
 var scopes = new string[] { "https://graph.microsoft.com/.default" };

var confidentialClient = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithAuthority($"https://login.microsoftonline.com/" + tenantId + "/v2.0")
        .WithClientSecret(clientSecret)
        .Build();

GraphServiceClient graphServiceClient = new GraphServiceClient(
    new DelegateAuthenticationProvider(
        async (requestMessage) => {
            var authResult = await confidentialClient
                .AcquireTokenForClient(scopes)
                .ExecuteAsync();

            requestMessage.Headers.Authorization = new AuthenticationHeaderValue(
            "Bearer",
            authResult.AccessToken
            );
        })
    );

var delta = await graphServiceClient.Groups
    .Delta()
    .Request()
    .Select("displayName,description,members")
    .GetAsync();

return Ok(delta);

这就是响应的样子; 在此处输入图像描述

您可以阅读@odata.nextLink@odata.deltaLink形式的AdditionalData属性

delta.AdditionalData.TryGetValue("@odata.deltaLink", out var deltaLink)
delta.AdditionalData.TryGetValue("@odata.nextLink ", out var nextLink)

只是一个提示:

你打电话时

var deltaPage = await graphServiceClient.Groups
    .Delta().Request().Select("displayName,description,members")
    .GetAsync();

结果的类型是IGroupDeltaCollectionPage并且您可以迭代所有页面以获取代码中的所有组

var deltaPage = await graphServiceClient.Groups
    .Delta().Request().Select("displayName,description,members")
    .GetAsync();

deltaPage.AdditionalData.TryGetValue("@odata.deltaLink", out var deltaLink)

var groups = new List<Group>();

groups.AddRange(deltaPage.CurrentPage);
while (deltaPage.NextPageRequest != null)
{
    deltaPage = await deltaPage.NextPageRequest.GetAsync();
    groups.AddRange(deltaPage.CurrentPage);
}

也许有点不一样。 这是我的测试。

当我通过 http 请求进行测试时,它有"@odata.context@odata.nextLink"

在此处输入图像描述

当我访问 nextLink 提供的nextLink时,我会得到deltaLink

在此处输入图像描述

然后转到 SDK,我无法在AdditionalData中获取nextLink ,但我可以在NextPageRequest变量中获取下一页请求:

在此处输入图像描述

当 AdditionalData 没有响应时,我可以获得deltaLink

在此处输入图像描述

所以恐怕你可以按照我的代码片段再次测试:

var delta = await _graphServiceClient.Users.Delta().Request().GetAsync();

            var queryOptions = new List<QueryOption>()
            {
                new QueryOption("$skiptoken", delta.NextPageRequest.QueryOptions[0].Value)
            };

            var delta2 = await _graphServiceClient.Users
                .Delta()
                .Request(queryOptions)
                .GetAsync();

我还测试了客户端凭证流,它具有相同的行为:

在此处输入图像描述 在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM