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

调用GraphServiceClient.Users.PostAsync()时OData错误:C#添加AD用户失败

解决Microsoft Graph API添加Azure AD用户时的ODataError问题

问题场景

尝试通过C#的Microsoft Graph API向Azure AD默认目录添加用户,编写代码如下:

var requestBody = new User
{
  AccountEnabled = true,
  DisplayName = "StackOverflow TestUser",
  MailNickname = "Stackie",
  Mail = "test@tempmailin.com",
  PasswordProfile = new PasswordProfile
  {
    ForceChangePasswordNextSignIn = false,
    Password = "testpwabcd",
  }
};
var result = await graphServiceClient.Users.PostAsync(requestBody);

执行Post请求时抛出Microsoft.Graph.Models.ODataErrors.ODataError,异常仅显示[External Code]无详细信息。已确认Graph客户端通过客户端密钥正常授权,可执行获取用户、将现有用户添加到组等操作,但调用Users.PostAsync或Invitations.PostAsync均报错;调用ToPostRequestInformation无报错但用户未创建;旧版.Request.AddAsync因已废弃无法编译;已配置对应API权限。

错误原因

创建Azure AD用户时,UserPrincipalName是必填参数,对于外部用户或未使用租户内已验证域名的用户,该参数需包含#EXT#后缀格式(格式为{用户名}@{租户域名}#EXT#)。原代码缺少该必填参数,导致API请求不符合规范,触发OData错误。

解决方法

在请求体中添加符合格式要求的UserPrincipalName参数,修改后的代码示例如下:

var requestBody = new User
{
  AccountEnabled = true,
  DisplayName = "StackOverflow TestUser",
  MailNickname = "Stackie",
  Mail = "test@tempmailin.com",
  // 补充UserPrincipalName,格式需包含#EXT#后缀
  UserPrincipalName = "test@yourtenantdomain.onmicrosoft.com#EXT#",
  PasswordProfile = new PasswordProfile
  {
    ForceChangePasswordNextSignIn = false,
    Password = "testpwabcd",
  }
};
var result = await graphServiceClient.Users.PostAsync(requestBody);

若需邀请外部用户,使用Invitations.PostAsync时,同样需确保InvitedUserPrincipalName等核心参数格式正确。

验证说明

添加UserPrincipalName参数后,重新执行代码即可成功创建Azure AD用户,API请求不再触发ODataError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:27:15