Usar a API do OneDrive sem interação do usuário, como um programa em lotes (versão .NET C#) (usando a biblioteca do Microsoft Graph)
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.54.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
Sobre esta dica
Esta dica é um programa modificado usando a biblioteca com base nas Microsoft Graph
dicas a seguir.
Portanto, consulte o procedimento de dicas a seguir para obter uma visão geral e o procedimento de operação no Azure e consulte esta dica ao criar o programa.
pré-condição
- Você tem uma conta da Microsoft para uma conta corporativa ou de estudante
- Você pode usar o OneDrive associado à conta da Microsoft listada acima (por exemplo, OneDrive Business)
- Visual Studio 2022 instalado
- Você registrou seu aplicativo no Azure consultando as dicas acima e obteve as informações necessárias, como ID.
Criar um aplicativo de console
Inicie o Visual Studio e crie um projeto para seu aplicativo de console. Você pode criá-lo fora do Visual Studio, mas usarei o Visual Studio por enquanto.
O local e o nome do projeto são opcionais. Nesse caso, o nome do projeto é OneDriveApiDotNetClientCredentialsMicrosoftGraph
.
Microsoft.Graph
Primeiro, obtenha as bibliotecas e Azure.Identity
do NuGet.
Desta vez, não dividiremos o código, mas Program.cs
o escreveremos escalonado a partir do topo, portanto, se você puder verificar o movimento, reescreva-o dividindo o código conforme necessário.
using Azure.Identity;
using Microsoft.Graph;
Descreva o namespace que você deseja usar.
// 各種 ID などの定義
var clientId = "XXXXXXXX"; // クライアント ID
var tenantId = "XXXXXXXX"; // テナント ID
var clientSecret = "XXXXXXXX"; // クライアント シークレット
var userId = "XXXXXXXX"; // ユーザー ID
Defina a ID obtida no Azure para cada um.
// 使いまわすので最初に定義しておく
HttpClient httpClient = new();
Você gerou um para fazer uma solicitação para HttpClient
o URL especificado.
// クライアント シークレットによる認証情報を定義
ClientSecretCredential clientSecretCredential = new(tenantId, clientId, clientSecret);
// HttpClient と認証情報で Microsoft Graph サービスのクライアントを生成
using GraphServiceClient graphClient = new(httpClient, clientSecretCredential);
Defina o segredo do cliente usando o ID obtido e assim por diante.
Você pode usar esses dados para HttpClient
GraphServiceClient
criar uma instância do .
Isso geralmente é GraphServiceClient
usado para acessar várias APIs.
// 対象ユーザーに紐づく OneDrive を取得 (紐づいているドライブが OneDrive 1つという前提)
var drive = await graphClient.Users[userId].Drive.GetAsync();
if (drive == null)
{
Console.WriteLine("ドライブを取得できませんでした。");
return;
}
GraphServiceClient
para obter o OneDrive associado ao usuário primeiro.
Se você tiver várias unidades vinculadas, Drives
localize e recupere o OneDrive de destino do .
É possível que uma unidade diferente do OneDrive também esteja vinculada, mas não verifiquei muito.
Se você tiver certeza de que apenas um OneDrive está vinculado, poderá Drive
obtê-lo como está nas propriedades.
// OneDrive のルートを取得
var root = await graphClient.Drives[drive.Id].Root.GetAsync();
if (root == null)
{
Console.WriteLine("OneDrive のルートを取得できませんでした。");
return;
}
Depois de ter o OneDrive, você pode acessá-lo livremente. Se você estiver procurando o ID de uma pasta ou arquivo, poderá especificá-lo diretamente. Em primeiro lugar, não verifiquei nada, então estou pegando a pasta raiz.
// ルート直下にあるフォルダ一覧取得
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}");
}
Depois de ter a pasta raiz, Children
você pode obter uma lista de arquivos e pastas diretamente abaixo dela.
Depois disso, enumero os valores recuperados e exibo os nomes.
Resumo
Tentei escrever código usando a biblioteca do "Microsoft Graph". Acho que você pode reduzir consideravelmente a quantidade de código em comparação com o acesso à URL da API.
No entanto, acho que as desvantagens são que diferentes versões da biblioteca podem causar alterações significativas no código e há pouca documentação. Se você puder tolerar isso, acho que seria mais vantajoso reduzir a quantidade de código que você escreve.
Obrigado
Eu tinha algumas perguntas sobre como usar a API do OneDrive desta vez, então fiz uma pergunta.