Microsoft graph api C#MsGraph SDK:发送BatchRequest以使用Microsoft Graph SDK获取管理器链接

Microsoft graph api C#MsGraph SDK:发送BatchRequest以使用Microsoft Graph SDK获取管理器链接,microsoft-graph-api,microsoft-graph-sdks,Microsoft Graph Api,Microsoft Graph Sdks,首先,如果有任何MSGraph SDK官方文档可供我参考,请分享 我有一个场景,我想从AAD查询所有经理和成员链接,而不分别提供用户和组objectID。DQ频道目前支持这一点,即我可以使用MsGraphSDK执行类似操作: MsGraphClient.Users.Delta().Request().Select("manager") 或 由于性能问题和其他问题,我不想使用DQ进行初始同步。 我的回退选项是直接通过图形进行查询,因此我希望执行以下操作,但这不会返回任何结果: MsGraphCl

首先,如果有任何MSGraph SDK官方文档可供我参考,请分享

我有一个场景,我想从AAD查询所有经理和成员链接,而不分别提供用户和组objectID。DQ频道目前支持这一点,即我可以使用MsGraphSDK执行类似操作:

MsGraphClient.Users.Delta().Request().Select("manager")

由于性能问题和其他问题,我不想使用DQ进行初始同步。 我的回退选项是直接通过图形进行查询,因此我希望执行以下操作,但这不会返回任何结果:

MsGraphClient.Users.Request().Select("manager")

看起来这在较低的(AADGraph)层上甚至不受支持。如果我错了,请纠正我,如果有,请提供解决方案

因此,我的回退方法是提取所有用户和组aadobjectd,并分别显式查询管理器和成员链接

在我的例子中,AAD中可能有500K个用户对象,我希望避免对AAD进行500K个单独的GetManager调用。相反,我希望尽可能多地批处理图形请求

在通过SDK发送批处理请求方面,我无法从互联网上找到太多帮助。 以下是我正在做的:

我有以下内容:

var batchRequestContent = new BatchRequestContent();
foreach (string aadObjectId in aadObjectIds)
{
    batchRequestContent.AddBatchRequestStep(new BatchRequestStep(aadObjectId, Client.Users[aadObjectId].Manager.Request().GetHttpRequestMessage()));
}
我正试图通过GraphSDK发送一个包含此内容的BatchRequest,以获得一个BatchResponse。SDK当前是否支持此功能?如果是,那么程序是什么?有文档或示例吗?如何读回批处理响应?最后,对于批处理中的#个请求是否有任何限制

谢谢,

这里是一个相关的帖子:

v1.0终结点中的manager和directReports关系当前不支持$expand。它是beta端点中的支持,但是 API返回了大量废弃信息:
https://graph.microsoft.com/beta/users?$expand=manager

客户机库目前部分支持批处理,尽管我们有几个请求来提供更好的支持 下一版本(PR和)

要对当前库和经过身份验证的客户端使用批处理,您将执行以下操作:

var authProv=MsGraphClient.AuthenticationProvider;
var httpClient=GraphClientFactory.Create(authProv);
//使用BatchRequestContent发送批处理请求。
HttpResponseMessage响应=等待httpClient.PostAsync(“https://graph.microsoft.com/v1.0/$batch”,batchRequestContent);
//使用BatchResponseContent处理http响应。
BatchResponseContent BatchResponseContent=新的BatchResponseContent(响应);
以下是相关帖子:

v1.0终结点中的manager和directReports关系当前不支持$expand。它是beta端点中的支持,但是 API返回了大量废弃信息:
https://graph.microsoft.com/beta/users?$expand=manager

客户机库目前部分支持批处理,尽管我们有几个请求来提供更好的支持 下一版本(PR和)

要对当前库和经过身份验证的客户端使用批处理,您将执行以下操作:

var authProv=MsGraphClient.AuthenticationProvider;
var httpClient=GraphClientFactory.Create(authProv);
//使用BatchRequestContent发送批处理请求。
HttpResponseMessage响应=等待httpClient.PostAsync(“https://graph.microsoft.com/v1.0/$batch”,batchRequestContent);
//使用BatchResponseContent处理http响应。
BatchResponseContent BatchResponseContent=新的BatchResponseContent(响应);

迈克尔,谢谢你提供的信息!我同意$expand太吵了,不是很理想。如果我们能做一些像:$expand=manager&$select=id,manager或$expand=members&$select=id这样的事情,那将是最好的,我认为我们目前无法做到,对吗?我将按照您的示例发送批处理请求。批量请求大小是否有任何限制或最佳数量?我认为最大批量大小为20个请求。最佳大小将取决于许多事情,如您提出的请求。您必须进行实验以确定最佳尺寸。请确保使用出厂时的httpClient,因为它具有重试逻辑,以防您受到限制。完美。非常有用的信息。如果遇到问题,我会尝试并发表评论。谢谢你的消息,迈克尔!我同意$expand太吵了,不是很理想。如果我们能做一些像:$expand=manager&$select=id,manager或$expand=members&$select=id这样的事情,那将是最好的,我认为我们目前无法做到,对吗?我将按照您的示例发送批处理请求。批量请求大小是否有任何限制或最佳数量?我认为最大批量大小为20个请求。最佳大小将取决于许多事情,如您提出的请求。您必须进行实验以确定最佳尺寸。请确保使用出厂时的httpClient,因为它具有重试逻辑,以防您受到限制。完美。非常有用的信息。如果遇到问题,我会尝试并发表评论。谢谢
MsGraphClient.Groups.Request().Select("members")
var batchRequestContent = new BatchRequestContent();
foreach (string aadObjectId in aadObjectIds)
{
    batchRequestContent.AddBatchRequestStep(new BatchRequestStep(aadObjectId, Client.Users[aadObjectId].Manager.Request().GetHttpRequestMessage()));
}