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

使用Azure AD Graph API在Azure AD B2C创建用户时JSON字符串提交报错

排查Azure AD B2C Graph API创建用户时的Request_BadRequest错误

错误原因分析

从你给出的错误信息和代码来看,有两个关键问题导致了这个Request_BadRequest错误:

  1. 缺少@odata.type属性
    你使用的是旧版Azure AD Graph API(从ADAL v2和错误格式可以判断),这个API要求在创建用户的请求体中明确指定实体类型。当你通过JSON文件提交时,文件里应该包含了"@odata.type": "#Microsoft.DirectoryServices.User"这个字段,但直接序列化匿名对象时没有添加,导致API无法识别实体类型。

  2. 属性名大小写不匹配
    代码里的SignInName属性名是错误的,Azure AD Graph API要求的字段名是**signInNames**(全小写开头,复数形式),API对字段名大小写敏感,这个错误也会导致请求体无法被正确解析。

解决方案

修改你的序列化代码,添加必要的@odata.type字段,并修正属性名:

private static void CreateUser(string[] args) {
    // 修正属性名,添加@odata.type字段
    string json = new JavaScriptSerializer().Serialize(new {
        @odata.type = "#Microsoft.DirectoryServices.User", // 新增实体类型指定
        accountEnabled = true,
        signInNames = new List<UserInformation.SignInName>() { // 修正为正确的字段名
            new UserInformation.SignInName(){ type = "emailAddress", value = "safanmomin92@gmail.com" }
        },
        creationType = "LocalAccount",
        displayName = "Safan Momin",
        mailNickname = "Safan",
        passwordProfile = new UserInformation.PasswordProfile {
            password = "Mazik@123",
            forceChangePasswordNextLogin = false
        },
        passwordPolicies = "DisablePasswordExpiration"
    });
    object formatted = JsonConvert.DeserializeObject(client.CreateUser(json).Result);
}

额外优化建议

  • 建议替换JavaScriptSerializer为你已经在使用的Newtonsoft.Json,它的序列化逻辑更灵活,也更贴合现代JSON规范:
    string json = JsonConvert.SerializeObject(new {
        // ... 你的对象属性
    });
    
  • 确认UserInformation.SignInName类中的type和value属性名是小写格式(你的代码里看起来是正确的),避免再次出现字段名不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:30:33