ASP.NET Core Web Api调用Graph API未返回全部用户数据如何解决?
问题原因及解决方案
1. 权限配置不足
你当前注册的Graph委托权限User.ReadBasic.All仅允许读取用户基础公开信息(仅包含DisplayName、主体名称、邮箱、头像等默认字段),City、Country、BusinessPhones属于用户扩展属性,需要额外申请User.Read.All委托权限,且该权限需要租户管理员完成全局同意后才会生效。
你在Graph Explorer中能正常获取全量字段,是因为你登录Graph Explorer的账号已经被授予了更高权限,或者你在Graph Explorer的权限面板中单独同意过User.Read.All权限。
修正权限配置:
builder.Services .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(builder.Configuration) .EnableTokenAcquisitionToCallDownstreamApi() // 新增User.Read.All权限 .AddMicrosoftGraph("https://graph.microsoft.com/beta", "user.read user.readbasic.all user.read.all profile") .AddInMemoryTokenCaches();
2. 调用代码存在语法错误
你现有代码中在Select之后重复调用了Request()方法,会清空之前已经配置的Filter、Select等查询参数,实际发往Graph API的请求没有携带$select参数,默认仅返回基础字段,因此扩展字段全部为null。
修正后的调用代码:
var userResult = await _graphServiceClient.Users .Request() .Filter($"mail eq 'someuser@myorg.com'") .Select(user => new { user.DisplayName, user.City, user.Country, user.BusinessPhones }) .GetAsync();
内容的提问来源于stack exchange,提问作者superkinhluan
相关产品推荐
相关产品推荐

