Usar la API de OneDrive sin interacción del usuario, como un programa por lotes (versión de C# de .NET) (mediante la biblioteca de Microsoft Graph)
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.54.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
Acerca de este consejo
Este consejo es un programa modificado que utiliza la biblioteca basado en Microsoft Graph
los siguientes consejos.
Por lo tanto, consulte el siguiente procedimiento de sugerencias para obtener información general y el procedimiento de operación en Azure, y consulte esta sugerencia cuando compile el programa.
precondición
- Tienes una cuenta de Microsoft para una cuenta profesional o educativa
- Puede usar el OneDrive asociado a la cuenta de Microsoft mencionada anteriormente (por ejemplo, OneDrive Business)
- Visual Studio 2022 instalado
- Ha registrado su aplicación en Azure consultando las sugerencias anteriores y ha obtenido la información necesaria, como el identificador.
Creación de una aplicación de consola
Inicie Visual Studio y cree un proyecto para la aplicación de consola. Puede crearlo fuera de Visual Studio, pero por ahora usaré Visual Studio.
La ubicación y el nombre del proyecto son opcionales. En este caso, el nombre del proyecto es OneDriveApiDotNetClientCredentialsMicrosoftGraph
.
Microsoft.Graph
En primer lugar, obtenga las bibliotecas y de Azure.Identity
NuGet.
Esta vez, no dividiremos el código, sino Program.cs
que lo escribiremos escalonado desde la parte superior, por lo que si puede verificar el movimiento, reescríbalo dividiendo el código según sea necesario.
using Azure.Identity;
using Microsoft.Graph;
Describa el espacio de nombres que desea utilizar.
// 各種 ID などの定義
var clientId = "XXXXXXXX"; // クライアント ID
var tenantId = "XXXXXXXX"; // テナント ID
var clientSecret = "XXXXXXXX"; // クライアント シークレット
var userId = "XXXXXXXX"; // ユーザー ID
Establezca el identificador obtenido en Azure para cada uno.
// 使いまわすので最初に定義しておく
HttpClient httpClient = new();
Ha generado un para realizar una solicitud a HttpClient
la URL especificada.
// クライアント シークレットによる認証情報を定義
ClientSecretCredential clientSecretCredential = new(tenantId, clientId, clientSecret);
// HttpClient と認証情報で Microsoft Graph サービスのクライアントを生成
using GraphServiceClient graphClient = new(httpClient, clientSecretCredential);
Defina el secreto de cliente con el identificador que obtuvo, y así sucesivamente.
Puede utilizar esos datos para HttpClient
GraphServiceClient
crear una instancia de .
Esto se GraphServiceClient
usa a menudo para acceder a varias API.
// 対象ユーザーに紐づく OneDrive を取得 (紐づいているドライブが OneDrive 1つという前提)
var drive = await graphClient.Users[userId].Drive.GetAsync();
if (drive == null)
{
Console.WriteLine("ドライブを取得できませんでした。");
return;
}
GraphServiceClient
para obtener primero el OneDrive asociado con el usuario.
Si tiene varias unidades vinculadas, Drives
busque y recupere el OneDrive de destino de .
Es posible que una unidad que no sea OneDrive también esté vinculada, pero no lo he comprobado mucho.
Si está seguro de que solo un OneDrive está vinculado, puede Drive
obtenerlo tal cual en las propiedades.
// OneDrive のルートを取得
var root = await graphClient.Drives[drive.Id].Root.GetAsync();
if (root == null)
{
Console.WriteLine("OneDrive のルートを取得できませんでした。");
return;
}
Una vez que tenga OneDrive, puede acceder a él libremente. Si está buscando el ID de una carpeta o archivo, puede especificarlo directamente. En primer lugar, no he comprobado nada, así que voy a obtener la carpeta raíz.
// ルート直下にあるフォルダ一覧取得
var rootChildren = await graphClient.Drives[drive.Id].Items[root.Id].Children.GetAsync();
if (rootChildren == null || rootChildren.Value == null)
{
Console.WriteLine("フォルダの一覧を取得できませんでした。");
return;
}
foreach (var item in rootChildren.Value)
{
Console.WriteLine($"Type={(item.File != null ? "File" : "Folder")}, Id={item.Id}, Name={item.Name}, Size={item.Size}");
}
Una vez que tenga la carpeta raíz, Children
puede obtener una lista de archivos y carpetas directamente debajo de ella.
Después de eso, enumero los valores recuperados y muestro los nombres.
Resumen
Intenté escribir código usando la biblioteca de "Microsoft Graph". Creo que se puede reducir considerablemente la cantidad de código en comparación con el acceso a la URL de la API.
Sin embargo, creo que las desventajas son que las diferentes versiones de la biblioteca pueden causar cambios importantes en el código y hay poca documentación. Si puedes tolerar estos, creo que sería más ventajoso reducir la cantidad de código que escribes.
gracias
Esta vez tenía algunas preguntas sobre el uso de la API de OneDrive, así que hice una pregunta.