Добавление пользователей в качестве участников группы с помощью Microsoft Graph Api в Net Core - PullRequest
0 голосов
/ 19 июня 2020

В моем проекте я использую Microsoft Graph Api в моем проекте Net Core 3.0 для подключения к Azure Intune и добавления групп и пользователей. При добавлении группы с членами api графика требует json представления пользователей, например ( документация ):

var group = new Group
{
    // other properties omitted
    AdditionalData = new Dictionary<string, object>()
    {
        {"owners@odata.bind", "[\"https://graph.microsoft.com/v1.0/users/26be1845-4119-4801-a799-aea79d09f1a2\"]"},
        {"members@odata.bind", "[\"https://graph.microsoft.com/v1.0/users/ff7cb387-6688-423c-8188-3da9532a73cc\",\"https://graph.microsoft.com/v1.0/users/69456242-0067-49d3-ba96-9de6f2728e14\"]"}
    }
};

Краткое редактирование: I попробовал приведенный выше код из документации, заменив Guids пользователями, которых я хочу добавить, и это тоже не сработало, дав мне такое же сообщение об ошибке. Конец редактирования.

Как мне динамически добавлять элементы в словарь, например, из массива идентификаторов пользователей? Кажется, они используют escape-символы, и использование JsonConvert.SerializeObject(arrayObjectWithIds), похоже, не работает, так как я получаю неправильно отформатированное поле OData из Graph Api: Invalid URL format specified in @odata.bind for members

Что у меня:

string[] memberIds = new string[] { "https://graph.microsoft.com/v1.0/users/123", "https://graph.microsoft.com/v1.0/users/456", "https://graph.microsoft.com/v1.0/users/789" };
string json = JsonConvert.SerializeObject(memberIds);

newGroup.AdditionalData = new Dictionary<string, object>()
{
    {"members@odata.bind", json }
};

// Send it off and get Invalid URL format specified in @odata.bind for members error

Это мой json, поскольку он в настоящее время прикреплен к словарю:

["https://graph.microsoft.com/v1.0/users/123\"","https://graph.microsoft.com/v1.0/users/456\"","https://graph.microsoft.com/v1.0/users/789\""]

Как правильно поместить элемент uri в объект словаря?

1 Ответ

2 голосов
/ 22 июня 2020

Проблема была вызвана escape-символом \" в коде. Я тестирую тот же код из документа и вижу то же сообщение об ошибке Invalid URL format specified in @odata.bind for members. Поэтому я изменил свой код, как показано ниже:

var additionalData = new Dictionary<string, object>()
    {
        {"owners@odata.bind", new List<string>()},
        {"members@odata.bind", new List<string>()}
    };
(additionalData["members@odata.bind"] as List<string>).Add("https://graph.microsoft.com/v1.0/users/xxxxx");
(additionalData["owners@odata.bind"] as List<string>).Add("https://graph.microsoft.com/v1.0/users/xxxxx");

var group = new Group
{
    Description = "Group with designated owner and members",
    DisplayName = "huryNewGroup",
    GroupTypes = new List<String>()
    {
        "Unified"
    },
    MailEnabled = true,
    MailNickname = "operations2019",
    SecurityEnabled = false,
    AdditionalData = additionalData
};

Запустив код, я успешно создал группу с участниками.

Кстати, мы можем столкнуться с проблемой разрешения. Сначала я добавил только разрешение Group.ReadWrite.All для приложения, но оно показывает, что у меня нет разрешения, когда я запускаю код. Затем я добавил другие разрешения Directory.ReadWrite.All, Directory.AccessAsUser.All, все работает нормально (насколько я знаю, есть небольшие проблемы с разрешениями Group, поэтому вам лучше добавить другие разрешения Directory)

Надеюсь, это поможет ~

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...