2016-06-01 4 views
3

Мне нужно получать события из календаря и узнавать отдельных пользователей в мероприятии.API-интерфейс Microsoft Graph: как определить, является ли посетитель группой

var graphServiceClient = new GraphServiceClient(...); 
var events = graphServiceClient.Me.CalendarView.Request().GetAsync(); 
// ... 
var attendee = events[0].Attendees[0]; 
// Is attendee a group or user? 
// If a group, how do we expand it? 

ответ

2

Мы можем определить, является ли почтовый адрес пользователем или группой через получение пользователя/группы. Например, мы можем получить определенную группу через REST ниже:

https://graph.microsoft.com/v1.0/groups ?$filter=mail+eq+'[email protected]»

Если электронная почта мы обеспечиваем пользователь, то ответ будет иметь пустое значение, иначе он возвращает информацию для этой группы.

И заставить член определенной группы, мы можем сделать запрос с возвращением ид по вышеуказанной заявке:

https://graph.microsoft.com/v1.0/groups/ {GroupID}/члены

А вот код, чтобы получить группу и его членов для вашей справки. И я рекомендую вам сделать REST через HttpClient, потому что он более гибкий и эффективный.

общественного асинхронной Задача GetGroup (строка MailAddress) {

var groups = await graphserviceClient.Groups.Request().Top(10).GetAsync(); 

    foreach (var group in groups.CurrentPage) 
    { 
     Console.WriteLine(group.Mail); 
     if (mailAddress.Equals(group.Mail)) 
      return group.Id; 
    } 

    while (groups.NextPageRequest != null) 
    { 
     groups = await groups.NextPageRequest.GetAsync(); 

     foreach (var group in groups.CurrentPage) 
     { 
      Console.WriteLine(group.Mail); 
      if (mailAddress.Equals(group.Mail)) 
       return group.Id; 
     } 
    } 

    return null; 

} 

public async void GetMembers(string groupId) 
{ 

    HttpClient client = new HttpClient(); 
    client.DefaultRequestHeaders.Add("Authorization", "bearer " + _accessToken); 

    string serviceURL = String.Format("https://graph.microsoft.com/v1.0/groups/{0}/members?$select=mail", groupId); 
    var response = client.GetAsync(serviceURL).Result; 

    JObject json = JObject.Parse(response.Content.ReadAsStringAsync().Result); 
    foreach (var mail in json["value"].Values("mail")) 
    { 
     Console.WriteLine(mail); 
    } 
} 

обновление

Мы должны иметь "Group.Read.All" область, чтобы прочитать группы: enter image description here

+0

Спасибо. Кажется, что api https://graph.microsoft.com/v1.0/groups?$filter=mail+eq+'[email protected] api требует одобрения уровня администратора. Есть ли способ сделать это с помощью проверки подлинности на уровне пользователя? – GraphUser2016

+1

Нет. Мы не можем получить информацию о группе без утверждения уровня администратора. Однако можно завершить решение с помощью аутентификации на уровне пользователя. Нам просто нужно убедиться, что приложение имеет область «Group.Read.All». См. Снимок экрана в предложении выше. –

+1

Group.Read, All требует разрешения администратора. Мы работаем над некоторыми новыми групповыми разрешениями, позволяющими пользователям соглашаться. –