微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#:如何使用Microsoft Graph API强制用户的全部负载?

如何解决C#:如何使用Microsoft Graph API强制用户的全部负载?

是否有一种方法可以控制是为Azure函数处理完整负载增量还是增量负载增量?

我正在使用Microsoft Graph API从Azure AD获取用户信息,并且自上次执行加载以来,我执行的代码已执行增量加载。

我希望能够执行全部负载的Azure AD用户而无需清除/删除相关的存储帐户,尤其是在生产方案中。相关代码如下:

public async Task<GraphUserProcessorResult> CheckUserDelta(DeltaBuilder deltaBuilder,ILogger logger)
    {
        List<User> gUsers = new List<User>();
        var index = 1;
        var userPg = await GetNewPgUser(deltaBuilder,logger);
        gUsers.AddRange(usersPg.Where(IsRelevantUser));
        while (usersPg.NextPageRequest != null)
        {
            index++;
            usersPg = await usersPg.NextPageRequest.GetAsync();
        }
        GraphUserProcessorResult gUserResult;
        logger.Loginformation("Found in graph " + gUsers.Count + " after " + index + " requests");
        index = 0;
        foreach (var gUser in gUsers)
        {
            index++;
            if (index >= 10) { break; }
        }

        if (userPg.AdditionalData != null && usersPage.AdditionalData.TryGetValue("@odata.deltaLink",out object deltaLink))
        {
            gUserResult = new GraphUserProcessorResult(new DeltaBuilder(deltaLink as string,userPg),gUsers);
        }
        else
        {
            gUserResult = new GraphUserProcessorResult(null,gUsers);
            logger.LogWarning("No Delta Link Found");
        }

        return gUserResult;
    }

 private async Task<IUserDeltaCollectionPage> GetNewPgUser(DeltaBuilder deltaBuilder,ILogger logger)
    {
        var lastPg = deltaBuilder?.lastPg;
        var deltaLink = deltaBuilder?.deltaLink;
        var retriesLeft = 5;
        ServiceException lastException = null;
        while (--retriesLeft > 0)
        {
            try
            {
                if (lastPage != null && deltaLink != null)
                {
                    return await _gUserClient.GetNextUserPage(lastPage,deltaLink)
                        .ConfigureAwait(true); // mute warning
                }
                else
                {
                    return await _graphUserClient.GetNewUserDelta()
                        .ConfigureAwait(true); // mute warning
                }
            }
            catch (ServiceException e)
            {
                // blah
            }
        }

        logger.LogError("blah");
        throw lastException;
    }

解决方法

请参阅正式的Microsoft Graph文档:Get incremental changes for users

此增量终结点旨在获取用户的更改,而不必从Microsoft Graph获取整个用户集并比较更改

没有终结点可以使您执行Azure AD用户的完整负载增量。唯一的解决方法是获取整个用户集,并根据所提到的文档自己比较更改。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。