일괄 처리 프로그램(.NET C# 버전)과 같은 사용자 상호 작용 없이 OneDrive API 사용(Microsoft Graph 라이브러리 사용)
운영 환경
- 비주얼 스튜디오
-
- 비주얼 스튜디오 2022
- .그물
-
- .그물 8
- Microsoft 인증 API
-
- 2.0 OAuth 2
- 마이크로소프트 OneDrive API
-
- 1.0
- Microsoft.그래프
-
- 5.54.0
- Microsoft 계정 유형
-
- 회사 또는 학교 계정
필수 구성 요소
- 비주얼 스튜디오
-
- 버전 중 하나
- .그물
-
- 버전 중 하나
- Microsoft 인증 API
-
- 2.0 OAuth 2
- 마이크로소프트 OneDrive API
-
- 1.0
- Microsoft.그래프
-
- 5.XX
- Microsoft 계정 유형
-
- 회사 또는 학교 계정
이 팁에 대한 정보
이 Tip은 다음 Tips를 Microsoft Graph
기반으로 라이브러리를 사용하는 수정된 프로그램입니다.
따라서 Azure의 개요 및 작업 절차는 다음 팁 절차를 참조하고 프로그램을 빌드할 때 이 팁을 참조하세요.
전제 조건
- 회사 또는 학교 계정에 대한 Microsoft 계정이 있습니다.
- 위에 나열된 Microsoft 계정과 연결된 OneDrive(예: OneDrive Business)를 사용할 수 있습니다.
- Visual Studio 2022 설치됨
- 위의 팁을 참조하여 Azure에 앱을 등록하고 ID와 같은 필요한 정보를 얻었습니다.
콘솔 응용 프로그램 만들기Create a console application
Visual Studio를 시작하고 콘솔 응용 프로그램에 대한 프로젝트를 만듭니다. Visual Studio 외부에서 만들 수 있지만 지금은 Visual Studio를 사용하겠습니다.
위치 및 프로젝트 이름은 선택 사항입니다. 이 경우 프로젝트 이름은 OneDriveApiDotNetClientCredentialsMicrosoftGraph
입니다.
Microsoft.Graph
먼저 NuGet에서 및 Azure.Identity
라이브러리를 가져옵니다.
이번에는 코드를 나누는 것이 아니라 Program.cs
위에서 엇갈리게 작성하므로, 움직임을 확인할 수 있으면 필요에 따라 코드를 나누어 다시 작성해 주세요.
using Azure.Identity;
using Microsoft.Graph;
사용할 네임스페이스를 설명합니다.
// 各種 ID などの定義
var clientId = "XXXXXXXX"; // クライアント ID
var tenantId = "XXXXXXXX"; // テナント ID
var clientSecret = "XXXXXXXX"; // クライアント シークレット
var userId = "XXXXXXXX"; // ユーザー ID
Azure에서 얻은 ID를 각각에 대해 설정합니다.
// 使いまわすので最初に定義しておく
HttpClient httpClient = new();
지정된 URL에 HttpClient
대한 요청을 생성하기 위해 를 생성했습니다.
// クライアント シークレットによる認証情報を定義
ClientSecretCredential clientSecretCredential = new(tenantId, clientId, clientSecret);
// HttpClient と認証情報で Microsoft Graph サービスのクライアントを生成
using GraphServiceClient graphClient = new(httpClient, clientSecretCredential);
가져온 ID를 사용하여 클라이언트 암호를 정의합니다.
해당 데이터를 HttpClient
GraphServiceClient
사용하여 의 인스턴스를 만들 수 있습니다.
GraphServiceClient
이는 다양한 API에 액세스하는 데 자주 사용됩니다.
// 対象ユーザーに紐づく OneDrive を取得 (紐づいているドライブが OneDrive 1つという前提)
var drive = await graphClient.Users[userId].Drive.GetAsync();
if (drive == null)
{
Console.WriteLine("ドライブを取得できませんでした。");
return;
}
GraphServiceClient
먼저 사용자와 연결된 OneDrive를 가져옵니다.
여러 드라이브가 연결되어 있는 경우 Drives
에서 대상 OneDrive를 찾아 검색합니다.
OneDrive 이외의 드라이브도 연동하고 있을 가능성은 있습니다만, 거기까지 확인은 하지 않았습니다.
OneDrive가 하나만 연결되어 있다고 확신하는 경우 Drive
속성에서 그대로 가져올 수 있습니다.
// OneDrive のルートを取得
var root = await graphClient.Drives[drive.Id].Root.GetAsync();
if (root == null)
{
Console.WriteLine("OneDrive のルートを取得できませんでした。");
return;
}
OneDrive가 있으면 자유롭게 액세스할 수 있습니다. 폴더 또는 파일의 ID를 조회하는 경우 직접 지정할 수 있습니다. 우선, 아무것도 확인하지 않았기 때문에 루트 폴더를 얻고 있습니다.
// ルート直下にあるフォルダ一覧取得
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}");
}
루트 폴더가 Children
있으면 바로 아래에 파일 및 폴더 목록을 가져올 수 있습니다.
그런 다음 검색된 값을 열거하고 이름을 표시합니다.
요약
"Microsoft Graph"라이브러리를 사용하여 코드를 작성하려고했습니다. API의 URL에 액세스하는 것에 비해 코드의 양을 상당히 줄일 수 있다고 생각합니다.
그러나 단점은 라이브러리의 다른 버전으로 인해 코드가 크게 변경 될 수 있고 문서가 거의 없다는 것입니다. 이것들을 용납 할 수 있다면 작성하는 코드의 양을 줄이는 것이 더 유리하다고 생각합니다.
감사
이번에 OneDrive API를 사용하는 것에 대해 몇 가지 질문이 있어서 질문을 했습니다.