You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 13:17:44