如何在尽可能少的调用中检索具有导航属性(如Manager )和属性(如全名)的服务主体中的所有用户?
我正在使用Microsoft.Graph包,我尝试过:
尝试1:
await graphClient.ServicePrincipals["objectId"].AppRoleAssignedTo.Request().GetAsync();
但这只给了我is,这是‘好的’,但然后我将必须得到所有的用户分开,这将作出许多调用的图形API。
我可以使用DirectoryObjects同时获取所有用户,但这不允许我扩展Manager属性。
例如:
var users = await graphClient.DirectoryObjects.GetByIds(principals.Select(p => p.PrincipalId.ToString()), new string[1] { "User" }).Request().Expand("manager").PostAsync();
给我一个错误:
Could not find a property named 'manager' on type 'microsoft.graph.directoryObject'.
尝试2:
我还试图通过使用过滤器来获取用户
await graphClient.Users.Request().Filter("appRoleAssignments/any(u:u/principalId eq objectId)").Expand(u => u.Manager).GetAsync();
但这给了我一个错误:
Request_UnsupportedQuery
发布于 2021-06-09 09:55:40
您可以这样编写代码:
var user = await graphClient.Users.Request().Filter("id in ('{objectId1}', '{objectId2}', ..., '{objectIdn}')").Expand(u => u.Manager).Select("displayName").GetAsync();
理想情况下,这将只使用一个调用来返回所需的数据。
但是基于“在尽可能少的调用中”的需求,我们将不得不面对一个问题,即我们需要将所有的对象ids都放入请求中,这可能会导致请求太长并最终失败。
我没有测试这个场景,这只是一个可能有帮助的方向。
我仍然建议您使用循环来获取信息。
https://stackoverflow.com/questions/67899339
复制相似问题