Χρήση του API του OneDrive χωρίς αλληλεπίδραση του χρήστη, όπως ένα πρόγραμμα δέσμης (έκδοση .NET C#) (χρησιμοποιώντας τη βιβλιοθήκη Microsoft Graph)

Σελίδα ενημέρωση :
Ημερομηνία δημιουργίας σελίδας :

Περιβάλλον λειτουργίας

Οπτικό στούντιο
  • Visual Studio 2022
.ΔΊΧΤΥ
  • .NET 8
API ελέγχου ταυτότητας της Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.54.0
Τύποι λογαριασμών Microsoft
  • Εταιρικός ή σχολικός λογαριασμός

Προϋποθέσεις

Οπτικό στούντιο
  • Μία από τις εκδόσεις
.ΔΊΧΤΥ
  • Μία από τις εκδόσεις
API ελέγχου ταυτότητας της Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.XX
Τύποι λογαριασμών Microsoft
  • Εταιρικός ή σχολικός λογαριασμός

Σχετικά με αυτήν τη συμβουλή

Αυτή η συμβουλή είναι ένα τροποποιημένο πρόγραμμα που χρησιμοποιεί τη βιβλιοθήκη με βάση Microsoft Graph τις ακόλουθες συμβουλές. Επομένως, ανατρέξτε στην παρακάτω διαδικασία συμβουλών για μια διαδικασία επισκόπησης και λειτουργίας στο Azure και ανατρέξτε σε αυτήν τη συμβουλή κατά τη δημιουργία του προγράμματος.

Προϋπόθεση

  • Έχετε λογαριασμό Microsoft για εταιρικό ή σχολικό λογαριασμό
  • Μπορείτε να χρησιμοποιήσετε το OneDrive που σχετίζεται με τον λογαριασμό Microsoft που αναφέρεται παραπάνω (π.χ. OneDrive Business)
  • Εγκατεστημένο το Visual Studio 2022
  • Έχετε καταχωρήσει την εφαρμογή σας στο Azure ανατρέχοντας στις παραπάνω συμβουλές και έχετε λάβει τις απαραίτητες πληροφορίες, όπως αναγνωριστικό.

Δημιουργία εφαρμογής κονσόλας

Ξεκινήστε το 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

Ορίστε το αναγνωριστικό που αποκτήθηκε στο Azure για κάθε ένα.

// 使いまわすので最初に定義しておく
HttpClient httpClient = new();

Έχετε δημιουργήσει ένα για να υποβάλετε ένα αίτημα στην HttpClient καθορισμένη διεύθυνση URL.

// クライアント シークレットによる認証情報を定義
ClientSecretCredential clientSecretCredential = new(tenantId, clientId, clientSecret);

// HttpClient と認証情報で Microsoft Graph サービスのクライアントを生成
using GraphServiceClient graphClient = new(httpClient, clientSecretCredential);

Ορίστε τον μυστικό κωδικό πελάτη χρησιμοποιώντας το αναγνωριστικό που αποκτήσατε και ούτω καθεξής. Μπορείτε να χρησιμοποιήσετε αυτά τα δεδομένα για να 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, μπορείτε να έχετε πρόσβαση σε αυτό ελεύθερα. Εάν αναζητάτε το αναγνωριστικό ενός φακέλου ή αρχείου, μπορείτε να το καθορίσετε απευθείας. Πρώτα απ 'όλα, δεν έχω ελέγξει τίποτα, οπότε λαμβάνω τον ριζικό φάκελο.

// ルート直下にあるフォルダ一覧取得
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.

Ωστόσο, νομίζω ότι τα μειονεκτήματα είναι ότι διαφορετικές εκδόσεις της βιβλιοθήκης μπορούν να προκαλέσουν αλλαγές στον κώδικα και υπάρχει λίγη τεκμηρίωση. Εάν μπορείτε να τα ανεχτείτε αυτά, νομίζω ότι θα ήταν πιο συμφέρουσα να μειώσετε την ποσότητα του κώδικα που γράφετε.

Ευχαριστώ

Είχα κάποιες ερωτήσεις σχετικά με τη χρήση του API του OneDrive αυτή τη φορά, οπότε έκανα μια ερώτηση.