C# Microsoft Graph SDK请求批处理响应的下一个链接
我正在使用Microsoft Graph SDK创建一个批处理请求,其中包含请求20个不同用户的单个请求。当我调用GetNextLinkAsync()时,结果总是空的。我尝试过使用批处理请求请求1000个不同的用户,每个请求包含20个单独的请求。这很好,响应总是在单个批处理响应中返回C# Microsoft Graph SDK请求批处理响应的下一个链接,c#,.net,microsoft-graph-api,microsoft-graph-sdks,microsoft-graph-batch,C#,.net,Microsoft Graph Api,Microsoft Graph Sdks,Microsoft Graph Batch,我正在使用Microsoft Graph SDK创建一个批处理请求,其中包含请求20个不同用户的单个请求。当我调用GetNextLinkAsync()时,结果总是空的。我尝试过使用批处理请求请求1000个不同的用户,每个请求包含20个单独的请求。这很好,响应总是在单个批处理响应中返回 我不明白为什么响应以单批响应内容返回,而不是给我获取下一个响应的链接 即使下一个链接始终为空,我如何使用Graph SDK跟踪它?它是一根绳子。这不像是下一页请求 foreach(batchRequests中的va
foreach(batchRequests中的var batchRequest)
{
尝试
{
var responses=等待PostBatchRequest(batchRequest.Request);
foreach(batchRequest.RequestId中的变量id)
{
尝试
{
var user=wait responses.GetResponseByIdAsync(id);
添加(user.UserPrincipalName,user.Id);
}捕获(服务异常e)
{
logger.登录信息(如状态代码);
}
}
}捕获(服务异常e)
{
logger.登录信息(如状态代码);
}
}
我找不到合适的文档来告诉您如何使用Graph SDK跟踪下一个链接,或者为什么这类请求的下一个链接总是空的,或者是否有任何特殊类型的请求返回下一个链接?所以很多都是我的包装类中的框架内容,但解决问题的关键应该在这里:
var results = await batch.ParseAsync<ContactFolderContactsCollectionResponse, IContactFolderContactsCollectionPage>(response => {
var page = response.Value;
if (response?.AdditionalData != null && response.AdditionalData.ContainsKey("@odata.nextLink"))
{
page.InitializeNextPageRequest(Application.GraphConnection.Client, (string)response.AdditionalData["@odata.nextLink"]);
}
return page;
});
现在,IContactFolderContactsCollectionPage通常有一个NextPageRequest属性,但是当您直接从ContactFolderContactsCollectionResponse解析它时,它不会被填写。幸运的是,我们可以在ContactFolderContactsCollectionResponse的AdditionalData字典中找到raw@odata.nextPage链接,我们可以使用IContactFolderContactsCollectionPage.InitializeNextPageRequest方法进行设置。
因此:
if (response?.AdditionalData != null && response.AdditionalData.ContainsKey("@odata.nextLink"))
{
page.InitializeNextPageRequest(Application.GraphConnection.Client, (string)response.AdditionalData["@odata.nextLink"]);
}
希望这能给你足够的线来穿。抱歉,如果语法的其余部分令人困惑,正如我所说的,很多语法都是在我正在构建的包装器框架中运行的,我
没有时间构建和测试干净的解决方案
也有可能整个事情是不同的,因为你有一个包含1000个步骤的批,而不是一个步骤返回数千个对象的批,就像我的例子一样
不管怎样,快乐狩猎
GetResponseByIdAsync<ContactFolderContactsCollectionResponse>(id)
var page = response.Value;
if (response?.AdditionalData != null && response.AdditionalData.ContainsKey("@odata.nextLink"))
{
page.InitializeNextPageRequest(Application.GraphConnection.Client, (string)response.AdditionalData["@odata.nextLink"]);
}