ใช้ OneDrive API โดยไม่มีการโต้ตอบกับผู้ใช้ เช่น โปรแกรมแบตช์ (เวอร์ชัน .NET C#) (โดยใช้ไลบรารี Microsoft Graph)
สภาพแวดล้อมในการทํางาน
- วิชวลสตูดิโอ
-
- วิชวลสตูดิโอ 2022
- ตาข่าย
-
- .NET 8
- API การรับรองความถูกต้องของ Microsoft
-
- 2.0 โอ๊ทัยวต์ 2
- Microsoft OneDrive API
-
- 1.0
- ไมโครซอฟท์.กราฟ
-
- 5.54.0
- ชนิดของบัญชี Microsoft
-
- บัญชีที่ทํางานหรือโรงเรียน
ข้อกําหนดเบื้องต้น
- วิชวลสตูดิโอ
-
- หนึ่งในเวอร์ชัน
- ตาข่าย
-
- หนึ่งในเวอร์ชัน
- API การรับรองความถูกต้องของ Microsoft
-
- 2.0 โอ๊ทัยวต์ 2
- Microsoft OneDrive API
-
- 1.0
- ไมโครซอฟท์.กราฟ
-
- 5.XX
- ชนิดของบัญชี Microsoft
-
- บัญชีที่ทํางานหรือโรงเรียน
เกี่ยวกับเคล็ดลับนี้
เคล็ดลับนี้เป็นโปรแกรมที่ดัดแปลงโดยใช้ไลบรารีตาม Microsoft Graph
เคล็ดลับต่อไปนี้
ดังนั้น โปรดดูขั้นตอนเคล็ดลับต่อไปนี้สําหรับภาพรวมและขั้นตอนการดําเนินงานบน Azure และดูเคล็ดลับนี้เมื่อคุณสร้างโปรแกรม
เงื่อนไขเบื้องต้น
- คุณมีบัญชี Microsoft สําหรับบัญชีที่ทํางานหรือโรงเรียน
- คุณสามารถใช้ OneDrive ที่เชื่อมโยงกับบัญชี Microsoft ที่ระบุไว้ข้างต้น (เช่น OneDrive Business)
- ติดตั้ง Visual Studio 2022 แล้ว
- คุณได้ลงทะเบียนแอปของคุณบน Azure โดยอ้างอิงถึงเคล็ดลับด้านบนและได้รับข้อมูลที่จําเป็น เช่น ID
สร้างแอปพลิเคชันคอนโซล
เริ่ม Visual Studio และสร้างโครงการสําหรับแอปพลิเคชันคอนโซลของคุณ คุณสามารถสร้างมันนอก Visual Studio ได้ แต่ฉันจะใช้ Visual Studio ในตอนนี้
สถานที่และชื่อโครงการเป็นทางเลือก ในกรณีนี้ ชื่อโครงการคือ OneDriveApiDotNetClientCredentialsMicrosoftGraph
.
Microsoft.Graph
ขั้นแรก รับและไลบรารีAzure.Identity
จาก NuGet
คราวนี้เราจะไม่แบ่งโค้ด แต่ Program.cs
จะเขียนเซจากด้านบนดังนั้นหากคุณสามารถตรวจสอบการเคลื่อนไหวได้โปรดเขียนใหม่โดยแบ่งโค้ดตามความจําเป็น
using Azure.Identity;
using Microsoft.Graph;
อธิบายเนมสเปซที่คุณต้องการใช้
// 各種 ID などの定義
var clientId = "XXXXXXXX"; // クライアント ID
var tenantId = "XXXXXXXX"; // テナント ID
var clientSecret = "XXXXXXXX"; // クライアント シークレット
var userId = "XXXXXXXX"; // ユーザー ID
ตั้งค่า ID ที่ได้รับบน Azure สําหรับแต่ละรายการ
// 使いまわすので最初に定義しておく
HttpClient httpClient = new();
คุณได้สร้างคําขอไปยัง HttpClient
URL ที่ระบุแล้ว
// クライアント シークレットによる認証情報を定義
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" ฉันคิดว่าคุณสามารถลดจํานวนโค้ดได้มากเมื่อเทียบกับการเข้าถึง URL ของ API
อย่างไรก็ตามฉันคิดว่าข้อเสียคือไลบรารีเวอร์ชันต่างๆอาจทําให้เกิดการเปลี่ยนแปลงโค้ดและมีเอกสารเพียงเล็กน้อย หากคุณสามารถทนต่อสิ่งเหล่านี้ได้ฉันคิดว่ามันจะเป็นประโยชน์มากกว่าที่จะลดจํานวนโค้ดที่คุณเขียน
ขอบคุณ
ฉันมีคําถามเกี่ยวกับการใช้ OneDrive API ในครั้งนี้ ดังนั้นฉันจึงถามคําถาม