https://graph.microsoft.com/v1.0/users/仅返回100条记录,我想获取Azure AD中存在的所有记录。
我曾尝试使用上述API,但它总是能给我100条记录,而最上面的我只能获取999条记录。但是我有10万多条记录,想一次获取。
答案 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;
}