与Microsoft.Azure.ActiveDirectory.GraphClient相比,调用Microsoft.Graph时用户的数据内容不足

时间:2018-08-13 20:52:03

标签: c# azure azure-active-directory microsoft-graph

我想将我的代码从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属性?

谢谢!

1 个答案:

答案 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;

测试结果:

enter image description here