使用Microsoft Graph API获取用户身份验证方法时出现空引用错误
解决Microsoft Graph获取用户时关联集合为Null的问题
没错,你确实需要明确指定要检索的关联集合——Microsoft Graph默认只会返回用户的基础属性(比如你提到的显示名称、ID、用户主体名称),不会自动加载嵌套的关联资源(像Authentication这类集合),这么做是为了优化请求性能,避免传输不必要的数据。
解决步骤:
- 使用
Expand()方法指定要加载的关联属性
在请求用户列表或单个用户时,通过.Expand()方法明确告诉Graph你需要哪些嵌套资源。比如要获取用户的认证方法,就需要展开authentication属性。
修改后的代码示例:
var tenantId = "tenantId"; var clientId = "clientId"; var clientSecret = "secret"; var scopes = new List<string> { "https://graph.microsoft.com/.default" }; var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret); var graphClient = new GraphServiceClient(clientSecretCredential, scopes); // 关键修改:用Expand加载authentication关联集合 var users = await graphClient .Users .Request() .Expand(u => u.Authentication) // 明确展开Authentication属性 .GetAsync(); // 现在exampleUser.Authentication不再是null var exampleUser = users[0]; var phoneAuthMethods = exampleUser.Authentication.PhoneMethods;
检查应用权限
还要确保你的应用已经被授予了对应的权限:如果只是读取认证方法,需要UserAuthenticationMethod.Read.All权限;如果后续要更新信息,则需要UserAuthenticationMethod.ReadWrite.All权限。单个用户的高效请求
如果你只需要操作单个用户,直接请求该用户并展开属性会更高效:
// 替换{user-id-or-userprincipalname}为实际的用户ID或用户主体名称 var specificUser = await graphClient .Users["{user-id-or-userprincipalname}"] .Request() .Expand(u => u.Authentication) .GetAsync();
另外,后续要更新用户信息时,记得确保应用有对应的写入权限,然后使用UpdateAsync()方法传入修改后的对象或属性即可。
内容的提问来源于stack exchange,提问作者glosrob
相关产品推荐
相关产品推荐

