C#:如何使用Microsoft Graph API强制满负荷用户?
有没有一种方法可以控制Azure函数是处理满负载增量还是增量负载增量 我正在使用Microsoft Graph API从Azure AD获取用户信息,并且自上次执行加载以来,我执行了增量加载的代码 我希望能够执行Azure AD用户的全部负载,而无需清除/删除相关存储帐户,特别是在生产场景中。有关守则如下:C#:如何使用Microsoft Graph API强制满负荷用户?,c#,.net-core,azure-active-directory,microsoft-graph-api,delta,C#,.net Core,Azure Active Directory,Microsoft Graph Api,Delta,有没有一种方法可以控制Azure函数是处理满负载增量还是增量负载增量 我正在使用Microsoft Graph API从Azure AD获取用户信息,并且自上次执行加载以来,我执行了增量加载的代码 我希望能够执行Azure AD用户的全部负载,而无需清除/删除相关存储帐户,特别是在生产场景中。有关守则如下: public async Task<GraphUserProcessorResult> CheckUserDelta(DeltaBuilder deltaBuilder, ILo
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;
}
公共异步任务CheckUserDelta(DeltaBuilder DeltaBuilder、ILogger记录器)
{
List gUsers=新列表();
var指数=1;
var userPg=await GetNewPgUser(deltaBuilder、logger);
AddRange(usersPg.Where(IsRelevantUser));
while(usersPg.NextPageRequest!=null)
{
索引++;
usersPg=await usersPg.NextPageRequest.GetAsync();
}
GraphUserProcessorResult gUserResult;
logger.LogInformation(“在图形“+gUsers.Count+”中找到,位于“+index+”请求之后”);
指数=0;
foreach(变量gUser在gUser中)
{
索引++;
如果(索引>=10){break;}
}
if(userPg.AdditionalData!=null&&usersPage.AdditionalData.TryGetValue(@odata.deltaLink”,out-object-deltaLink))
{
gUserResult=新的GraphUserProcessorResult(新的DeltBuilder(DeltLink作为字符串,userPg),gUsers);
}
其他的
{
gUserResult=新GraphUserProcessorResult(null,gUsers);
logger.LogWarning(“未找到增量链接”);
}
返回gUserResult;
}
专用异步任务GetNewPgUser(DeltaBuilder DeltaBuilder、ILogger记录器)
{
var lastPg=deltaBuilder?.lastPg;
var deltaLink=deltaBuilder?.deltaLink;
var-retriesLeft=5;
ServiceException lastException=null;
而(--retriesLeft>0)
{
尝试
{
if(lastPage!=null&&deltaLink!=null)
{
return wait_gUserClient.GetNextUserPage(最后一页,deltaLink)
.ConfigureAwait(true);//静音警告
}
其他的
{
return await\u graphUserClient.GetNewUserDelta()
.ConfigureAwait(true);//静音警告
}
}
捕获(服务异常e)
{
//废话
}
}
logger.LogError(“blah”);
抛出最后一个异常;
}
请参阅Microsoft Graph官方文档:
此增量端点旨在获取对用户的更改,而无需从Microsoft Graph获取整个用户集并比较更改
并没有一个端点允许您执行Azure AD用户的满载增量。唯一的解决方法是获取整个用户集,并按照文档中提到的那样自己比较更改。如果我的答案对您有帮助,您可以将其作为答案接受(单击答案旁边的复选标记,将其从灰色变为填充)。看见这可能对其他社区成员有益。非常感谢。