对 Microsoft Graph API 执行 POST 请求以将成员添加到 AD 组

问题描述 投票:0回答:4

我正在尝试通过 Azure 函数将成员添加到调用 Microsoft Graph API 的 AD 组

通过 Graph API 执行 GET 请求非常简单直接,但我找不到任何示例如何执行 Graph API 的 post 请求

我确实有一个 Graph API 的发布请求示例,它是

POST https://graph.microsoft.com/v1.0/groups/{id}/members/$ref
Content-type: application/json
Content-length: 30

{
  "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/{id}"
}

这是我成功用于检索图形响应的代码

public static async Task<HttpResponseMessage> GetDirectoryUsers(string graphToken, TraceWriter log, string displayName)
{
    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", graphToken);

    string requestUrl = "https://graph.microsoft.com/v1.0/groups?$top=2&$filter=displayName eq '" + displayName + "'&$expand=Members";
    var request = new HttpRequestMessage(new HttpMethod("GET"), requestUrl);
    var response = await client.SendAsync(request);
    return response;
}

但是,我完全不知道如何通过 Azure 函数中的 C# 代码执行请求,以将检索到的用户添加到另一个 AD。如何构造请求URL?我应该如何处理该请求 URL 中的 odata id?

如果有人能以任何方式帮助我,我将不胜感激

c# microsoft-graph-api azure-functions
4个回答
1
投票

添加子群/成员入群的复用方法(O365目前不支持添加子群入群)

/// <param name="graphClient"></param>
  /// <param name="groupId"></param>
  /// <param name="memberId">memberId/sub-group id</param>
  /// <returns></returns>
    public static async Task AddGroupMember1(GraphServiceClient 
    graphClient, string groupId, string memberId)
    { 
         User memberToAdd = new User { Id = memberId };
        //Group memberToAdd= new Group { Id = memberId };
        await graphClient.Groups[groupId].Members.References.Request().AddAsync(memberToAdd); 
   }

1
投票

这是对我有用的答案

public static async Task<string> AddGroupMember(string accessToken, string groupId, string memberId)
{
    var status = string.Empty;
    try
    {
        string endpoint = "https://graph.microsoft.com/v1.0/groups/" + groupId + "/members/$ref";
        string queryParameter = "";

        // pass body data 
        var keyOdataId = "@odata.id";
        var valueODataId = "https://graph.microsoft.com/v1.0/directoryObjects/" + memberId;

        var values = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>(keyOdataId, valueODataId)
};
        var jsonData = $@"{{ ""{keyOdataId}"": ""{valueODataId}"" }}";
        var body = new StringContent(jsonData, Encoding.UTF8, "application/json");


        using (var client = new HttpClient())
        {
            using (var request = new HttpRequestMessage(HttpMethod.Post, endpoint + queryParameter))
            {
                request.Content = body;
                request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

                using (var response = await client.SendAsync(request))
                {
                    if (response.StatusCode == HttpStatusCode.NoContent)
                        status = "Member added to Group";
                    else
                        status = $"Unable to add Member to Group: {response.StatusCode}";
                }
            }
        }
    }
    catch (Exception ex)
    {
        status = $"Error adding Member to Group: {ex.Message}";
    }

    return status;
}

0
投票

这对我有用

public void AddUserToGroup(string groupId)
    {
        var requestUri = $"{_graphApiUrl}/v1.0/groups/{groupId}/members/$ref";
        var id = "user_id";

        var OdataId = "@odata.id";
        var ODataValue = $"https://graph.microsoft.com/v1.0/users/{id}";

        var content = $@"{{ ""{OdataId}"": ""{ODataValue}"" }}";

        using (var httpClient = new HttpClient())
        using (var httpRequest = CreateHttpRequest(HttpMethod.Post, requestUri, content))
        {
            var response = httpClient.SendAsync(httpRequest).GetAwaiter().GetResult();
            if (!response.IsSuccessStatusCode)
            {
                var reason = $"Status code: {(int)response.StatusCode}, Reason: {response.StatusCode}";
                throw new Exception(reason);
            }
        }
    }

重要的是创建使用请求时:

request.Content = new StringContent(content, Encoding.UTF8, "application/json");

它不适用于:

request.Content = new StringContent(content);
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;odata=verbose");

0
投票

我正在使用 graph api 发送电子邮件。代码如下

public async Task<dynamic> SendMail(string accessToken, MailWrapper mail)
{
    try
    {
        GraphServiceClient graphClient = SDKHelper.GetMicrosoftAuthenticatedClient(accessToken);
        Message message = await BuildEmailMessage(graphClient, mail);
        await graphClient.Me.SendMail(message, true).Request().PostAsync(CancellationToken.None);
        var response = await graphClient.Me.MailFolders.SentItems.Messages.Request()
                                .OrderBy(sendDateTimeDesc)
                                .Top(1)
                                .GetAsync();
        return await Task.FromResult(response);
    }
    catch (ServiceException ex)
    {
        throw ex;
    }
}

组装 Microsoft.Graph,版本=1.9.0.0

© www.soinside.com 2019 - 2024. All rights reserved.