Usar a API do OneDrive para enumerar mais de 200 itens em uma pasta
Ambiente operacional
- Visual Studio
-
- Visual Studio 2022
- .REDE
-
- .NET 8
- API de Autenticação da Microsoft
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.68.0
- Tipos de contas da Microsoft
-
- Conta corporativa ou de estudante
Pré-requisitos
- Visual Studio
-
- Uma das versões
- .REDE
-
- Uma das versões
- API de Autenticação da Microsoft
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.XX
- Tipos de contas da Microsoft
-
- Conta corporativa ou de estudante
O número máximo de itens que podem ser recuperados de uma vez
Ao recuperar o conteúdo de uma pasta com a API do OneDrive, o número máximo que pode ser recuperado de uma só vez é 200. Este número também pode ser encontrado no site oficial abaixo.
Isso é verdade mesmo se você acessar o URL diretamente, mas Microsoft.Graph
também se usar a biblioteca.
O código a seguir, mencionado nas dicas anteriores, recupera apenas até 200 resultados.
Nenhum erro ocorrerá,DriveItemCollectionResponse.OdataNextLink
mas você pode verificar se há mais de 201 itens verificando se o valor da propriedade está definido.
// フォルダ内アイテム一覧取得
var folderChildren = await graphClient.Drives[drive.Id].Items[folderItem.Id].Children.GetAsync();
if (folderChildren == null || folderChildren.Value == null)
{
Console.WriteLine("フォルダの一覧を取得できませんでした。");
return;
}
foreach (var item in folderChildren.Value)
{
Console.WriteLine($"Type={(item.File != null ? "File" : "Folder")}, Id={item.Id}, Name={item.Name}, Size={item.Size}");
}
Se você deseja obtê-lo por solicitação HTTP, você @odata.nextLink
precisa acessar a URL de um por um para obtê-lo.
Microsoft.Graph
Se você estiver usando a biblioteca, há uma maneira mais fácil de obter mais de 200 itens.
PageIterator
Existe uma classe chamada , então tudo o que você precisa fazer é usá-la. Use-o da seguinte maneira:
// フォルダ内アイテム一覧取得
var folderChildren = await graphClient.Drives[drive.Id].Items[folderItem.Id].Children.GetAsync();
if (folderChildren == null || folderChildren.Value == null)
{
Console.WriteLine("フォルダの一覧を取得できませんでした。");
return;
}
var pageIterator = PageIterator<DriveItem, DriveItemCollectionResponse>.CreatePageIterator(
graphClient,
folderChildren,
(item) =>
{
Console.WriteLine($"Type={(item.File != null ? "File" : "Folder")}, Id={item.Id}, Name={item.Name}, Size={item.Size}");
return true; // false を返すまで次のアイテムを列挙します
});
await pageIterator.IterateAsync();
Depois de obter a resposta da lista de itens da pasta (DriveItemCollectionResponse
)
PageIterator.CreatePageIterator
Especifique-o como o segundo argumento do método.
O terceiro argumento é um retorno de chamada, que é chamado item por item, portanto, se você listá-lo, poderá obter todos os itens.
PageIterator.CreatePageIterator
A propósito, está apenas gerando uma iteração, então precisamos chamar o método no final PageIterator.IterateAsync
.