https://graph.microsoft.com/v1.0/users/仅返回100条记录,我想获取Azure AD中存在的所有记录

时间:2019-09-30 09:39:43

标签: microsoft-graph

https://graph.microsoft.com/v1.0/users/仅返回100条记录,我想获取Azure AD中存在的所有记录。

我曾尝试使用上述API,但它总是能给我100条记录,而最上面的我只能获取999条记录。但是我有10万多条记录,想一次获取。

2 个答案:

答案 0 :(得分:0)

https://graph.microsoft.com/v1.0/users/的调用返回一个名为@ odata.nextlink的属性。使用@odata.nextlink请求更多页面的用户数据。

答案 1 :(得分:0)

我认为无法通过一个请求来获取所有用户,但是您可以使用一种方法为您获取所有用户。以下代码正在请求前100个用户。此后,它将呼叫接下来的100个用户,直到没有更多用户为止。

这只是解决方法。 请记住,此功能需要很长时间才能运行

    public async Task<List<GraphApiUser>> GetAllCloudUserAsync()
    {
        var query = "/users";
        var response = await SendGraphApiRequest(HttpMethod.Get, query);
        var data = JsonConvert.DeserializeObject<GetMultipleUserResponse>(await response.Content.ReadAsStringAsync());

        var result = new List<GraphApiUser>();
        result.AddRange(data.value);
        var debugCounter = 1;

        while (!string.IsNullOrEmpty(data.NextLink))
        {
            response = await SendGraphApiRequest(HttpMethod.Get, "/"+data.NextLink);
            data = JsonConvert.DeserializeObject<GetMultipleUserResponse>(await response.Content.ReadAsStringAsync());
            result.AddRange(data.value);
            debugCounter++;
        }
        return result;
    }

GetMultipleUserResponse-类看起来像这样:

public class GetMultipleUserResponse
{
    public List<GraphApiUser> value { get; set; }
    [JsonProperty("odata.nextLink")]
    public string NextLink { get; set; }
}

GraphApiUser类在AD之间看起来有所不同,因为每个人都可以定义自己的声明。设置此类属于您!

发送请求可以这样完成:

    private async Task<HttpResponseMessage> SendGraphApiRequest(HttpMethod httpMethod, string query,
        string json = "")
    {
        HttpClient http = new HttpClient();
        var requestUri = "Your Ressource Id" + "Your Tenant" + "your query"+ "your api version";

        HttpRequestMessage request = new HttpRequestMessage(httpMethod, requestUri);
        request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", GetYourTokenHere());
        request.Content = new StringContent(json, Encoding.UTF8, "application/json");
        HttpResponseMessage response = await http.SendAsync(request);

        if (!response.IsSuccessStatusCode)
        {
            string error = await response.Content.ReadAsStringAsync();
            object formatted = JsonConvert.DeserializeObject(error);
            Debug.WriteLine("Error Calling the Graph API: \n" +
                            JsonConvert.SerializeObject(formatted, Newtonsoft.Json.Formatting.Indented));
            return null;
        }

        return response;
    }