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

使用Microsoft Graph SDK更新Schema Extension值始终为NULL问题求助

问题根源及修正方案

你遇到的问题由4个核心错误导致,对应修正方式如下:

错误点

  1. Schema Extension ID使用错误:创建自定义Schema Extension时,如果未使用租户已验证域名作为ID前缀,Graph会自动生成ext<8位随机字符>_<你自定义ID>格式的完整ID,你代码中直接用自定义的data1作为字段key,和实际存储的完整ID不匹配,导致写入、读取都找不到对应字段。
  2. AdditionalData赋值方式错误:usr.AdditionalData本身就是字典类型,你直接把另一个字典extensionInstance整体作为值插入,相当于多套了一层字典结构,不符合API参数要求。
  3. 更新用户传参冗余:直接传入查询返回的完整User对象执行更新,可能携带只读属性触发静默错误,即使返回成功也不会实际生效。
  4. 用户查询过滤字段错误:原代码过滤用户时写的userPrincipalNames是错误字段名,正确字段名为userPrincipalName(单数),可能导致查询到错误用户。

修正代码

1. 创建Schema Extension后获取完整ID
// 创建SchemaExtension之后必须拿返回对象的Id,这才是实际生效的完整ID
var createdExtension = await graphServiceClient.SchemaExtensions.Request().AddAsync(schemaExtension);
// 后续所有操作都用这个fullExtensionId,不要用自己定义的"data1"
string fullExtensionId = createdExtension.Id; // 格式和你Graph Explorer里看到的extXXXXXXXX_data1一致

如果是复用已经创建好的Schema,直接查询获取完整ID即可:

var existExtension = await graphServiceClient.SchemaExtensions["data1"].Request().GetAsync();
string fullExtensionId = existExtension.Id;
2. 修正用户扩展字段写入逻辑
var usrCollection = await graphServiceClient.Users
           .Request()
           .Filter($"userPrincipalName eq '{adelev_Mail}'") // 修正字段名
           .GetAsync();
 
var usr = usrCollection.FirstOrDefault();

if(usr != null)
{
    // 新建空User对象,只传需要更新的字段,避免只读属性冲突
    var updateUser = new User
    {
        AdditionalData = new Dictionary<string, object>()
    };
    // 直接插入键值对,不要套多余的字典
    updateUser.AdditionalData.Add(fullExtensionId, new data1 { Prop1 = "testing" });

    await graphServiceClient.Users[usr.Id]
              .Request()
              .UpdateAsync(updateUser);
}
3. 修正扩展字段查询逻辑
User updatedUser = await graphServiceClient.Users[usr.Id].Request()
                .Select($"id, {fullExtensionId}") // 用完整ID查询
                .GetAsync();
// 读取扩展值
var extensionData = updatedUser.AdditionalData[fullExtensionId] as data1;
var prop1Value = extensionData?.Prop1;

内容的提问来源于stack exchange,提问作者Karthik Dhanasekaran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:54:04