Запрос Microsoft Graph через пакеты SDK

Завершено

Пакеты SDK для Microsoft Graph предназначены для оптимизации создания высококачественных, эффективных и отказоустойчивых приложений, использующих доступ к Microsoft Graph. Пакеты SDK включают два компонента: библиотеку служб и базовую библиотеку.

Библиотека служб содержит модели и построители запросов, созданные из метаданных Microsoft Graph, чтобы обеспечить широкий и доступный для обнаружения интерфейс.

Базовая библиотека предоставляет набор функций, улучшающих работу со всеми службами Microsoft Graph. Встроенная поддержка повторных попыток, безопасного перенаправления, прозрачной проверки подлинности и сжатия полезных данных улучшает качество взаимодействия приложения с Microsoft Graph, не добавляя никаких сложностей и сохраняя полный контроль. Базовая библиотека также обеспечивает поддержку общих задач, таких как просмотр коллекций и создание пакетных запросов.

В этом уроке вы узнаете о доступных пакетах SDK и просмотрите некоторые примеры кода некоторых наиболее распространенных операций.

Установка пакета SDK .NET для Microsoft Graph

Пакет SDK .NET для Microsoft Graph включается в следующие пакеты NuGet:

  • Microsoft.Graph — содержит модели и построители запросов для доступа к конечной точке v1.0 через текучий API. Microsoft.Graph имеет зависимость от Microsoft.Graph.Core.
  • Microsoft.Graph.Beta — содержит модели и построители запросов для доступа к конечной точке beta через текучий API. Microsoft.Graph.Beta имеет зависимость от Microsoft.Graph.Core.
  • Microsoft.Graph.Core — основная библиотека для отправки вызовов к Microsoft Graph.

Создание клиента Microsoft Graph

Клиент Microsoft Graph предназначен для упрощения вызовов к Microsoft Graph. В течение всего времени существования приложения можно использовать один экземпляр клиента. В следующем примере кода показано, как создать экземпляр клиента Microsoft Graph. Поставщик проверки подлинности обрабатывает получение маркеров доступа для приложения. Разные поставщики приложений поддерживают разные клиентские сценарии. Дополнительные сведения о том, какой поставщик и какие параметры подойдут для вашего сценария, см. в статье Выбор поставщика проверки подлинности.

var scopes = new[] { "User.Read" };

// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";

// Value from app registration
var clientId = "YOUR_CLIENT_ID";

// using Azure.Identity;
var options = new TokenCredentialOptions
{
    AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};

// Callback function that receives the user prompt
// Prompt contains the generated device code that you must
// enter during the auth process in the browser
Func<DeviceCodeInfo, CancellationToken, Task> callback = (code, cancellation) => {
    Console.WriteLine(code.Message);
    return Task.FromResult(0);
};

// /dotnet/api/azure.identity.devicecodecredential
var deviceCodeCredential = new DeviceCodeCredential(
    callback, tenantId, clientId, options);

var graphClient = new GraphServiceClient(deviceCodeCredential, scopes);

Чтение сведений из Microsoft Graph

Чтобы получить данные из Microsoft Graph, необходимо сначала создать объект запроса, а затем выполнить метод GET из запроса.

// GET https://graph.microsoft.com/v1.0/me

var user = await graphClient.Me
    .GetAsync();

Получение списка сущностей

Получение списка сущностей аналогично получению одной сущности, за исключением других вариантов настройки запроса. Параметр запроса $filter можно использовать для сокращения результирующего набора, чтобы включить в него только соответствующие указанному условию строки. Параметр $orderBy запроса запрашивает, что сервер предоставляет список сущностей, отсортированных по указанным свойствам.

// GET https://graph.microsoft.com/v1.0/me/messages?$select=subject,sender&$filter=<some condition>&orderBy=receivedDateTime

var messages = await graphClient.Me.Messages
    .Request()
    .Select(m => new {
        m.Subject,
        m.Sender
    })
    .Filter("<filter condition>")
    .OrderBy("receivedDateTime")
    .GetAsync();

Удаление сущности

Запросы на удаление создаются так же, как запросы на получение сущности, но с запросом DELETE вместо GET.

// DELETE https://graph.microsoft.com/v1.0/me/messages/{message-id}

string messageId = "AQMkAGUy...";
var message = await graphClient.Me.Messages[messageId]
    .Request()
    .DeleteAsync();

Создание сущности

При работе с пакетами SDK, которые поддерживают текучий стиль, можно добавлять новые элементы в коллекции с помощью метода Add. Для пакетов SDK на основе шаблонов объект запроса предоставляет метод post.

// POST https://graph.microsoft.com/v1.0/me/calendars

var calendar = new Calendar
{
    Name = "Volunteer"
};

var newCalendar = await graphClient.Me.Calendars
    .Request()
    .AddAsync(calendar);

Другие ресурсы