如何解决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 举报,一经查实,本站将立刻删除。