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

C# Azure AD Graph API使用Open Extensions设置用户自定义属性报错求助

问题排查与解决方案

触发错误的常见原因及对应修复方案

  • ExtensionName 命名不符合要求
    OpenTypeExtension的ExtensionName必须使用你的Azure AD租户下已完成验证的域名的反向格式,你当前使用的com.test.test如果不是租户已验证的域名,就会直接触发属性无效错误。你可以进入Azure AD门户的「自定义域名」页面,查看租户下的已验证域名,替换为对应反向格式即可,比如你的租户验证域名是yourcompany.com,扩展名称就可以设置为com.yourcompany.userattr。
  • 新建用户存在同步延迟
    你创建用户后立刻调用添加扩展的接口,此时AAD的用户对象可能还未完成全局同步,直接操作扩展属性就会报错。你可以在两个操作之间添加短暂延迟,或者加入指数退避重试逻辑:
int retryCount = 0;
while (retryCount < 3)
{
    try
    {
        await graphServiceClient
           .Users[id]
           .Extensions
           .Request()
           .AddAsync(extension);
        break;
    }
    catch (ServiceException ex) when (ex.Message.Contains("One or more properties contains invalid values") && retryCount < 3)
    {
        retryCount++;
        await Task.Delay(1000 * retryCount);
    }
}
  • Graph API 权限配置错误
    确认你的应用注册中已经分配了以下权限之一,且已经授予了租户级管理员同意:
    • 委托权限:User.ReadWrite.All、Directory.AccessAsUser.All
    • 应用权限:User.ReadWrite.All、Directory.ReadWrite.All
  • 同名扩展已存在于该用户
    如果之前已经给这个用户添加过同名的OpenTypeExtension,再次调用新增接口会报错。此时你需要先查询用户的现有扩展,存在的话调用更新接口即可:
// 先查询是否已存在对应扩展
var existingExt = await graphServiceClient
    .Users[id]
    .Extensions["替换为你的合法扩展名称"]
    .Request()
    .GetAsync();

if (existingExt != null)
{
    // 执行更新逻辑
    var updateExt = new OpenTypeExtension
    {
        AdditionalData = new Dictionary<string, object>
        {
            {"NewAttribute1", "Batman"},
            {"NewAttribute2" , "Spiderman"}
        }
    };
    await graphServiceClient
        .Users[id]
        .Extensions["替换为你的合法扩展名称"]
        .Request()
        .UpdateAsync(updateExt);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 00:30:02