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)

Página atualizada :
Data de criação de página :

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.