Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft Graph SDK请求批处理响应的下一个链接_C#_.net_Microsoft Graph Api_Microsoft Graph Sdks_Microsoft Graph Batch - Fatal编程技术网

C# Microsoft Graph SDK请求批处理响应的下一个链接

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

我正在使用Microsoft Graph SDK创建一个批处理请求,其中包含请求20个不同用户的单个请求。当我调用GetNextLinkAsync()时,结果总是空的。我尝试过使用批处理请求请求1000个不同的用户,每个请求包含20个单独的请求。这很好,响应总是在单个批处理响应中返回

  • 我不明白为什么响应以单批响应内容返回,而不是给我获取下一个响应的链接
  • 即使下一个链接始终为空,我如何使用Graph SDK跟踪它?它是一根绳子。这不像是下一页请求
  • 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"]);
    }