我想将我的代码从Microsoft.Azure.ActiveDirectory.GraphClient更改为同一注册应用程序上的Microsoft.Graph。在某些数据结构(例如Group,Company)上,提取的数据是相同的。但是用户的提取数据不同。 (我正在使用Graph API的V1.0。)
例如,当我尝试通过其用户获取特定用户时。 旧方法是调用:
graphClient.Users.Where(user => user.UserPrincipalName.Equals(upn)).ExecuteSingleAsync()
//graphClient is an instance of ActiveDirectoryClient
新呼叫是:
graphClient.Users.Request().Filter("userPrincipalName eq '"+ upn + "'").GetAsync()
//graphClient is an instance of GraphServiceClient
尽管它们都会使用输入UPN的正确信息来获取同一用户。但是与旧方法相比,用新方法获取的数据还不够,其许多属性都为空。例如AccountEnabled,Othermails,AssignedPlans和UserType。
我是否以错误的方式调用GraphServiceClient,以致于它无法获取所有数据?还是应该通过补充调用获取这些null属性?
谢谢!
答案 0 :(得分:1)
我是否以错误的方式调用GraphServiceClient,以致于它无法获取所有数据?
这是Microsoft Graph用户API的正常行为,请参阅Microsoft Graph用户API here和此摘录:
默认情况下,仅返回有限的一组属性(
businessPhones, displayName, givenName, id, jobTitle, mail, mobilePhone, officeLocation, preferredLanguage, surname, userPrincipalName
)。本示例说明了默认的请求和响应。
还是应该通过补充调用获取这些null属性?
我们可以使用$ select参数来查询属性。以下是您可以参考的演示代码。您可以选择所需的属性。这个对我有用。
var user = graphserviceClient.Users.Request().Select(x =>new
{
x.UserPrincipalName,
x.DisplayName,
x.AccountEnabled,
x.UsageLocation
} ).Filter("userPrincipalName eq '" + upn + "'")
.GetAsync().Result;
测试结果: