2017-01-26 2 views
0

У нас есть Azure AD с более чем 20 тыс. Пользователей. Я пытаюсь прочитать всех этих пользователей со свойствами, такими как displayName, city, accountName, department. Я не могу читать всех пользователей. Я использую skiptoken, чтобы получить всех пользователей, но я получаю каждый раз только несколько тысяч не всех пользователей.Есть ли ограничение на загрузку пользователей Azure AD программным путем с помощью Graph API?

Вот мой пример кода для извлечения skiptoken:

public static string ExtractSkipToken(string responseString) 
    { 
     if (responseString.Contains("skiptoken=X")) 
     { 
      var startString = "skiptoken=X'"; 
      var endString = "'"; 
      var startIndex = responseString.IndexOf(startString, StringComparison.Ordinal); 
      var subText = responseString.Substring(startIndex + startString.Length); 
      var endIndex = subText.IndexOf(endString, StringComparison.Ordinal); 
      var skipToken = subText.Substring(0, endIndex); 
      return skipToken; 
     } 

     return string.Empty; 
    } 

Кто сделал это?

ответ

1

API-интерфейс Azure AD Graph поддерживает пейджинг, как описано в this document. Идея заключается в том, что ссылка на следующую страницу результатов приведена в ответе с текущей страницы. Я бы рекомендовал не разбирать skiptoken вручную, а скорее использовать предоставленную ссылку в ответе JSON.

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

+0

Благодарим вас за ответ. Я анализирую responseString, потому что он также имеет загруженную информацию о пользователях. Что вы подразумеваете, используя предоставленную ссылку в ответе JSON. Я следил за вашим рефером и теперь менял свой RequestUrl с помощью $ top = 999, и теперь я получаю только 7k или 8k пользователей. – user2584780

+0

Я нашел проблему. Это проблема синтаксического анализа от responseString. Я использовал ((JObject) результат) .First.Children() as IJEnumerable ; чтобы получить пользователей от responseString, но вышеприведенный оператор не всегда возвращает пользователей, которые находятся в responseString, чтобы собирать в мою коллекцию, если я использую JObject.Parse (responseString) ["value"], я всегда могу собирать пользователей, которые находятся в responseString. Большое вам спасибо за вашу помощь. – user2584780