C# 与Microsoft.Azure.ActiveDirectory.GraphClient相比,调用Microsoft.Graph时没有足够的用户数据内容

C# 与Microsoft.Azure.ActiveDirectory.GraphClient相比,调用Microsoft.Graph时没有足够的用户数据内容,c#,azure,azure-active-directory,microsoft-graph-api,C#,Azure,Azure Active Directory,Microsoft Graph Api,我想在同一注册的应用程序上将代码从Microsoft.Azure.ActiveDirectory.GraphClient更改为Microsoft.Graph。在某些数据结构(例如,集团、公司)上,获取的数据是相同的。但是,用户获取的数据是不同的。(我正在使用Graph API的V1.0。) 例如,当我试图通过其upn获取某个用户时。 旧方法是调用: graphClient.Users.Where(user=>user.UserPrincipalName.Equals(upn)).ExecuteS

我想在同一注册的应用程序上将代码从Microsoft.Azure.ActiveDirectory.GraphClient更改为Microsoft.Graph。在某些数据结构(例如,集团、公司)上,获取的数据是相同的。但是,用户获取的数据是不同的。(我正在使用Graph API的V1.0。)

例如,当我试图通过其upn获取某个用户时。 旧方法是调用:

graphClient.Users.Where(user=>user.UserPrincipalName.Equals(upn)).ExecuteSingleAsync()
//graphClient是ActiveDirectoryClient的实例

新的方法是:

graphClient.Users.Request().Filter(“userPrincipalName eq'+upn+”).GetAsync()
//graphClient是GraphServiceClient的一个实例

尽管它们都将获取具有正确输入UPN信息的同一用户。但与旧方法相比,新方法获取的数据不足,很多属性为空。例如AccountEnabled、OtherMail、AssignedPlans和UserType

我是否以错误的方式调用GraphServiceClient,使其无法获取所有数据?或者我应该通过补充调用获取这些空属性吗

谢谢

我是否以错误的方式调用GraphServiceClient,使其无法获取所有数据

这是Microsoft Graph user API的正常行为,请参阅Microsoft Graph user API和以下摘录:

默认情况下,只返回一组有限的属性(
BusinessPhone、displayName、givenName、id、jobTitle、mail、mobilePhone、officeLocation、preferredLanguage、姓氏、userPrincipalName
)。此示例演示了默认的请求和响应


或者我应该通过补充调用获取这些空属性吗

我们可以使用$select参数来查询属性。下面是您可以参考的演示代码。您可以选择所需的属性。它对我有用

var user = graphserviceClient.Users.Request().Select(x =>new 
        {
            x.UserPrincipalName,
            x.DisplayName,
            x.AccountEnabled,
            x.UsageLocation

        } ).Filter("userPrincipalName eq '" + upn + "'")
       .GetAsync().Result;
测试结果:


非常感谢您的帮助!