Sử dụng API OneDrive mà không cần tương tác với người dùng, chẳng hạn như chương trình hàng loạt (phiên bản .NET C#) (sử dụng thư viện Microsoft Graph)
Môi trường hoạt động
- Visual Studio
-
- Visual Studio 2022
- .MẠNG
-
- .NET 8
- API xác thực Microsoft
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.54.0
- Các loại tài khoản Microsoft
-
- Tài khoản cơ quan hoặc trường học
Điều kiện tiên quyết
- Visual Studio
-
- Một trong những phiên bản
- .MẠNG
-
- Một trong những phiên bản
- API xác thực Microsoft
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Microsoft.Graph
-
- 5.XX
- Các loại tài khoản Microsoft
-
- Tài khoản cơ quan hoặc trường học
Về mẹo này
Mẹo này là một chương trình được sửa đổi bằng cách sử dụng thư viện dựa trên Microsoft Graph
các Mẹo sau.
Do đó, hãy tham khảo quy trình mẹo sau để biết tổng quan và quy trình vận hành trên Azure, đồng thời tham khảo mẹo này khi bạn xây dựng chương trình.
Điều kiện tiên quyết
- Bạn có tài khoản Microsoft cho tài khoản cơ quan hoặc trường học
- Bạn có thể sử dụng OneDrive được liên kết với tài khoản Microsoft được liệt kê ở trên (ví dụ: OneDrive Business)
- Visual Studio 2022 đã được cài đặt
- Bạn đã đăng ký ứng dụng của mình trên Azure bằng cách tham khảo các mẹo ở trên và có được các thông tin cần thiết như ID.
Tạo ứng dụng bảng điều khiển
Khởi động Visual Studio và tạo một dự án cho ứng dụng bảng điều khiển của bạn. Bạn có thể tạo nó bên ngoài Visual Studio, nhưng bây giờ tôi sẽ sử dụng Visual Studio.
Vị trí và tên dự án là tùy chọn. Trong trường hợp này, tên dự án là OneDriveApiDotNetClientCredentialsMicrosoftGraph
.
Microsoft.Graph
Đầu tiên, lấy thư viện và từ Azure.Identity
NuGet.
Lần này, chúng tôi sẽ không chia mã mà sẽ Program.cs
viết so le từ trên xuống, vì vậy nếu bạn có thể kiểm tra chuyển động, vui lòng viết lại bằng cách chia mã nếu cần.
using Azure.Identity;
using Microsoft.Graph;
Mô tả không gian tên bạn muốn sử dụng.
// 各種 ID などの定義
var clientId = "XXXXXXXX"; // クライアント ID
var tenantId = "XXXXXXXX"; // テナント ID
var clientSecret = "XXXXXXXX"; // クライアント シークレット
var userId = "XXXXXXXX"; // ユーザー ID
Đặt ID nhận được trên Azure cho từng loại.
// 使いまわすので最初に定義しておく
HttpClient httpClient = new();
Bạn đã tạo một để thực hiện một yêu cầu đến HttpClient
URL được chỉ định.
// クライアント シークレットによる認証情報を定義
ClientSecretCredential clientSecretCredential = new(tenantId, clientId, clientSecret);
// HttpClient と認証情報で Microsoft Graph サービスのクライアントを生成
using GraphServiceClient graphClient = new(httpClient, clientSecretCredential);
Xác định bí mật máy khách bằng cách sử dụng ID bạn có được, v.v.
Bạn có thể sử dụng dữ liệu đó để HttpClient
GraphServiceClient
tạo một thực thể của .
Điều này thường được GraphServiceClient
sử dụng để truy cập các API khác nhau.
// 対象ユーザーに紐づく OneDrive を取得 (紐づいているドライブが OneDrive 1つという前提)
var drive = await graphClient.Users[userId].Drive.GetAsync();
if (drive == null)
{
Console.WriteLine("ドライブを取得できませんでした。");
return;
}
GraphServiceClient
để nhận OneDrive được liên kết với người dùng trước.
Nếu bạn có nhiều ổ đĩa được liên kết, hãy Drives
tìm và truy xuất OneDrive mục tiêu từ .
Có thể một ổ đĩa khác ngoài OneDrive cũng được liên kết, nhưng tôi chưa kiểm tra nhiều như vậy.
Nếu bạn chắc chắn rằng chỉ có một OneDrive được liên kết, bạn Drive
có thể lấy nó như trong thuộc tính.
// OneDrive のルートを取得
var root = await graphClient.Drives[drive.Id].Root.GetAsync();
if (root == null)
{
Console.WriteLine("OneDrive のルートを取得できませんでした。");
return;
}
Khi bạn có OneDrive, bạn có thể truy cập nó một cách tự do. Nếu bạn đang tra cứu ID của một thư mục hoặc tệp, bạn có thể chỉ định trực tiếp. Trước hết, tôi chưa kiểm tra bất cứ điều gì, vì vậy tôi nhận được thư mục gốc.
// ルート直下にあるフォルダ一覧取得
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}");
}
Khi bạn có thư mục gốc, Children
bạn có thể nhận được danh sách các tệp và thư mục ngay bên dưới nó.
Sau đó, tôi liệt kê các giá trị đã truy xuất và hiển thị tên.
Tóm tắt
Tôi đã cố gắng viết mã bằng thư viện "Microsoft Graph". Tôi nghĩ bạn có thể giảm lượng mã đáng kể so với việc truy cập URL của API.
Tuy nhiên, tôi nghĩ nhược điểm là các phiên bản khác nhau của thư viện có thể gây ra những thay đổi đột phá đối với mã và có rất ít tài liệu. Nếu bạn có thể chịu đựng những điều này, tôi nghĩ sẽ có lợi hơn nếu giảm số lượng mã bạn viết.
Cảm ơn
Lần này tôi có một số câu hỏi về việc sử dụng API OneDrive, vì vậy tôi đã đặt một câu hỏi.