Использование API OneDrive без взаимодействия с пользователем, например пакетной программы (версия .NET C#) (с использованием библиотеки Microsoft Graph)
Операционная среда
- Визуальная студия
-
- Визуальная студия 2022
- .СЕТЬ
-
- .NET 8
- API проверки подлинности Майкрософт
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Веб-сайт Microsoft.Graph
-
- 5.54.0
- Типы учетных записей Майкрософт
-
- Рабочий или учебный аккаунт
Необходимые условия
- Визуальная студия
-
- Одна из версий
- .СЕТЬ
-
- Одна из версий
- API проверки подлинности Майкрософт
-
- 2.0 OAuth 2
- Microsoft OneDrive API
-
- 1.0
- Веб-сайт Microsoft.Graph
-
- 5.ХХ
- Типы учетных записей Майкрософт
-
- Рабочий или учебный аккаунт
Об этом совете
Этот совет является модифицированной программой, использующей библиотеку, основанную на Microsoft Graph
следующих советах.
Таким образом, обратитесь к следующим советам для получения обзора и процедуры работы в Azure, а также обратитесь к этим советам при сборке программы.
предварительное условие
- У вас есть учетная запись Майкрософт для рабочей или учебной учетной записи
- Вы можете использовать OneDrive, связанный с учетной записью Microsoft, указанной выше (например, OneDrive Business)
- Установлена Visual Studio 2022
- Вы зарегистрировали свое приложение в Azure, следуя приведенным выше советам, и получили необходимую информацию, такую как идентификатор.
Создание консольного приложения
Запустите Visual Studio и создайте проект для консольного приложения. Вы можете создать его вне Visual Studio, но пока я буду использовать Visual Studio.
Местоположение и имя проекта являются необязательными. В данном случае имя проекта — OneDriveApiDotNetClientCredentialsMicrosoftGraph
.
Microsoft.Graph
Во-первых, получите библиотеки and 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, поэтому я задал вопрос.