ใช้ 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 ที่คุณได้รับ เป็นต้น คุณสามารถใช้ข้อมูลนั้นเพื่อสร้างHttpClientGraphServiceClientอินสแตนซ์ของ . สิ่งนี้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 ในครั้งนี้ ดังนั้นฉันจึงถามคําถาม