Usar la API de OneDrive para enumerar más de 200 elementos en una carpeta
Entorno operativo
- Estudio visual
-
- Visual Studio 2022
- .RED
-
- .NET 8
- API de autenticación de Microsoft
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.68.0
- Tipos de cuentas de Microsoft
-
- Cuenta profesional o educativa
Prerrequisitos
- Estudio visual
-
- Una de las versiones
- .RED
-
- Una de las versiones
- API de autenticación de Microsoft
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.XX
- Tipos de cuentas de Microsoft
-
- Cuenta profesional o educativa
El número máximo de elementos que se pueden recuperar a la vez
Al recuperar el contenido de una carpeta con la API de OneDrive, el número máximo que se puede recuperar a la vez es 200. Esta cifra también se puede encontrar en el sitio web oficial a continuación.
Esto es cierto incluso si presiona la URL directamente, pero Microsoft.Graph
también si usa la biblioteca.
El siguiente código, que se mencionó en los consejos anteriores, solo recupera hasta 200 resultados.
No se producirá ningún error,DriveItemCollectionResponse.OdataNextLink
pero puede comprobar si hay más de 201 elementos comprobando si se ha establecido el valor de la propiedad.
// フォルダ内アイテム一覧取得
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}");
}
Si desea obtenerlo por solicitud HTTP, debe @odata.nextLink
acceder a la URL de uno por uno para obtenerlo.
Microsoft.Graph
Si está utilizando la biblioteca, hay una manera más fácil de obtener los más de 200 elementos.
PageIterator
Hay una clase llamada , así que todo lo que tienes que hacer es usarla. Úselo de la siguiente manera:
// フォルダ内アイテム一覧取得
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();
Una vez que obtenga la respuesta de la lista de elementos de la carpeta (DriveItemCollectionResponse
)
PageIterator.CreatePageIterator
Especifíquelo como el segundo argumento del método.
El tercer argumento es una devolución de llamada, a la que se llama elemento por elemento, por lo que si lo enumera, debería poder obtener todos los elementos.
PageIterator.CreatePageIterator
Por cierto, solo está generando una iteración, por lo que debemos llamar al método al final PageIterator.IterateAsync
.