使用所有者

时间:2017-09-28 11:06:24

标签: microsoft-graph

我有一个Office 365 Group,我想通过Microsoft Graph API添加。根据API文档,我相信我需要

POST https://graph.microsoft.com/v1.0/groups
Content-type: application/json
Content-length: 244
{
  "description": "Self help community for library",
  "displayName": "Library Assist",
  "groupTypes": [
    "Unified"
  ],
  "mailEnabled": true,
  "mailNickname": "library",
  "securityEnabled": false
}

但是当我尝试添加

"owner": [{ "@odata.id": "https://graph.microsoft.com/v1.0/users/{id}"}]

我收到错误(该ID实际上是办公室中存在的ID,因此我不想将其放在此处。)

如果我先运行创建组然后再添加所有者但不在一起,它们就可以工作。为什么呢?

想让我尽可能轻松。我将邮递员放在标签中只是因为那是我目前正在使用的工具

2 个答案:

答案 0 :(得分:7)

实际上,今天使用OData绑定语法(即您的语法不正确)支持并且可能。注意:这是我们的坏,不是你的,因为我们没有记录这种支持的行为。我将向我们提交一个错误来记录这一点。

在此期间,请尝试将此添加到您的请求中(它对我有用),并告诉我们这是否适合您:

"owners@odata.bind": ["https://graph.microsoft.com/v1.0/users/{id}"]

事实上,在同一个请求中,您还可以将成员绑定为请求的一部分:

"owners@odata.bind": [ "https://graph.microsoft.com/v1.0/users/{id1}" ], "members@odata.bind": [ "https://graph.microsoft.com/v1.0/users/{id1}", "https://graph.microsoft.com/v1.0/users/{id2}" ]

不确定绑定集合中可以放置的项目数量有多少限制,但我确定有一个限制。我会看看其中一个开发者是否可以对此发表评论。

希望这有帮助,

答案 1 :(得分:0)

丹,谢谢您的解决方案!基于此,我创建了也可与Graph API一起使用的解决方案。诀窍是使用以下从Graph客户端库继承Group的类:

public class GroupExtended : Group
{
    [JsonProperty("owners@odata.bind", NullValueHandling = NullValueHandling.Ignore)]
    public string[] OwnersODataBind { get; set; }
    [JsonProperty("members@odata.bind", NullValueHandling = NullValueHandling.Ignore)]
    public string[] MembersODataBind { get; set; }
}

,然后像这样添加它:

var newGroup = new GroupExtended
{
    DisplayName = displayName,
    Description = description,
    MailNickname = mailNickname,
    MailEnabled = true,
    SecurityEnabled = false,
    Visibility = isPrivate == true ? "Private" : "Public",
    GroupTypes = new List<string> { "Unified" }
};

if (owners != null && owners.Length > 0)
{
    var users = GetUsers(graphClient, owners);
    if (users != null)
    {
        newGroup.OwnersODataBind = users.Select(u => string.Format("https://graph.microsoft.com/v1.0/users/{0}", u.Id)).ToArray();
    }
}

if (members != null && members.Length > 0)
{
    var users = GetUsers(graphClient, members);
    if (users != null)
    {
        newGroup.MembersODataBind = users.Select(u => string.Format("https://graph.microsoft.com/v1.0/users/{0}", u.Id)).ToArray();
    }
}

await graphClient.Groups.Request().AddAsync(newGroup);

此处介绍了完整的解决方案:http://sadomovalex.blogspot.com/2018/11/create-azure-ad-groups-with-initial.html