Запрос 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);