/// <summary> /// Gets group members for AD group. /// </summary> /// <param name="groupIds">Group ids.</param> /// <param name="accessToken">accessToken to get Graph API data.</param> /// <returns>List of members.</returns> public async Task <List <Models.ADGroup> > GetBatchADGroupsInfoAsync( IEnumerable <string> groupIds, string accessToken) { var allRequests = new BatchRequestCreator().CreateBatchRequestPayloadForGroupsDetails(groupIds); BatchRequestPayload payload = new BatchRequestPayload() { Requests = allRequests, }; List <Models.ADGroup> responses = await this.CallGraphApiBatchPostToGetGroupsAsync(accessToken, this.graphQuery, JsonConvert.SerializeObject(payload)); return(responses); }
/// <summary> /// To Call GraphApi to get AD Group members. /// </summary> /// <param name="accessToken">Access Token.</param> /// <param name="payload">input JSON.</param> /// <returns>A <see cref="T"/> representing the result of operation.</returns> public async Task <dynamic> CallGraphApiBatchPostAsync(string accessToken, string payload) { List <ADGroupMembers> users = new List <ADGroupMembers>(); HttpClient.DefaultRequestHeaders.Clear(); HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); var request = new StringContent(payload, Encoding.UTF8, "application/json"); Uri myUri = new Uri(this.graphQuery); HttpResponseMessage response = await HttpClient.PostAsync(myUri, request).ConfigureAwait(true); string content = await response.Content.ReadAsStringAsync(); if (response.StatusCode == HttpStatusCode.OK) { var responses = this.GetValue <dynamic>(content, "responses"); List <string> pagingResultURLs = new List <string>(); foreach (var res in responses) { var userlist = this.GetValue <dynamic>(JsonConvert.SerializeObject(res), "body"); var result = this.GetValue <List <ADGroupMembers> >(JsonConvert.SerializeObject(userlist), "value"); users.AddRange(result); string query = this.GetValue <string>(JsonConvert.SerializeObject(userlist), "@odata.nextLink"); if (query != null) { pagingResultURLs.Add(query); } } if (pagingResultURLs.Count > 0) { var allRequests = new BatchRequestCreator().CreatePagingBatchRequestPayloadForDetails(pagingResultURLs); BatchRequestPayload payloadPagingRequests = new BatchRequestPayload() { Requests = allRequests, }; users.AddRange(await this.CallGraphApiBatchPostAsync(accessToken, JsonConvert.SerializeObject(payloadPagingRequests))); } return(users); } return(content); throw new Exception(content); }
/// <summary> /// Gets group members for AD group. /// </summary> /// <param name="groupIds">Group ids.</param> /// <param name="accessToken">accessToken to get Graph API data.</param> /// <returns>List of members.</returns> public async Task <List <ADGroupMembers> > GetBatchADGroupMembersAsync( IEnumerable <string> groupIds, string accessToken) { List <ADGroupMembers> adGroupMembers = new List <ADGroupMembers>(); try { var allRequests = new BatchRequestCreator().CreateBatchRequestPayloadForDetails(groupIds); BatchRequestPayload payload = new BatchRequestPayload() { Requests = allRequests, }; List <ADGroupMembers> responses = await this.CallGraphApiBatchPostAsync(accessToken, JsonConvert.SerializeObject(payload)); List <string> nestedGroupIds = new List <string>(); for (int i = 0; i < responses.Count; i++) { if (responses[i].Type == "#microsoft.graph.group") { nestedGroupIds.Add(responses[i].Id); } else { adGroupMembers.Add(responses[i]); } } if (nestedGroupIds.Count > 0) { adGroupMembers.AddRange(await this.GetBatchADGroupMembersAsync(nestedGroupIds, accessToken)); } } catch (Exception) { throw; } return(adGroupMembers); }