Перенос использования клиентской библиотеки .NET в Microsoft Graph
Эта статья является частью шага 3. Просмотр сведений о процессемиграции приложений.
Если в настоящее время в приложении используется клиентская библиотека Graph Azure Active Directory (Azure AD), переключитесь на клиентную библиотеку Microsoft Graph .NET.
В этой статье вы узнаете, как выполнить миграцию в клиентную библиотеку Microsoft Graph .NET:
- Создание клиента Microsoft Graph с использованием маркера доступа (который можно получить с помощью библиотеки проверки подлинности Azure Active Directory (ADAL) или библиотеки проверки подлинности Майкрософт (MSAL))
- Как формулировать запросы
- Использование построителей запросов
- Обработка коллекций и разбиение по страницам
Общие сведения о шагах миграции
В следующих шагах предполагается, что приложение использует ADAL для получения маркеров доступа для вызова Azure AD Graph. Переключение на MSAL можно выполнить как отдельный шаг, описанный в разделе Миграция на MSAL.
Чтобы получить маркер доступа к Microsoft Graph, обновите resourceUrl с
https://graph.windows.net
доhttps://graph.microsoft.com
.В приложении обновите ссылки на клиентную библиотеку Microsoft Graph, изменив:
using Microsoft.Azure.ActiveDirectory.GraphClient;
Кому:
using Microsoft.Graph;
С помощью диспетчера пакетов скачайте и обновите пакет NuGet Microsoft Graph и обновите зависимости.
Обновите конструктор клиента, чтобы создать
GraphServiceClient
, а неActiveDirectoryClient
. В следующих фрагментах кода предполагается, что приложение используетAcquireTokenAsyncForUser()
метод для получения новых маркеров. Определение для этого метода можно найти в примере active-directory-dotnet-graphapi-console.Изменить:
ActiveDirectoryClient client = new ActiveDirectoryClient(serviceRoot, async () => await AcquireTokenAsyncForUser());
Кому:
GraphServiceClient graphClient = new GraphServiceClient(serviceRoot, new DelegateAuthenticationProvider(async (requestMessage) => { var token = await AcquireTokenAsyncForUser(); requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token); }));
Для клиентской библиотеки
serviceRoot
Microsoft Graph значение также включает номер версии. В настоящее время это значение равноhttps://graph.microsoft.com/v1.0
.Запросы на обновление для использования синтаксиса построителя запросов клиента Microsoft Graph путем изменения:
signedInUser = (User)await client.Me.ExecuteAsync();
Кому:
signedInUser = (User)await client.Me.Request().GetAsync();
Примечание.
Клиентская библиотека Graph Azure AD поддерживает синтаксис запросов на основе LINQ. Однако клиентская библиотека Microsoft Graph этого не делает. Следовательно, необходимо преобразовать соответствующие запросы в более RESTful-выражение.
Для этого измените:
var groups = await client.Groups.Where(g => g.DisplayName.StartsWith("a")).ExecuteAsync();
Кому:
var groups = await client.Groups.Request().Filter("startswith(displayName,'a')").GetAsync();
Если кодовые страницы проходят через коллекции, внесите следующие незначительные изменения. В следующем примере сравнивается выборка группы и разбиение по страницам по 5 за раз. Хотя в коде для Azure AD Graph требуется конструкция fetcher для получения членов группы, в Microsoft Graph такого требования нет. Чтобы быть кратким, отображаются только члены пользователя, не отображаются условия try/catch и error, а фрагменты кода предназначены для однопотокового консольного приложения.
Например, измените следующий код с помощью клиентской библиотеки .NET Azure AD Graph:
Group retrievedGroup = client.Groups. Where(g => g.ObjectId.Equals(id)).ExecuteAsync().Result; IGroupFetcher retrievedGroupFetcher = (IGroupFetcher) retrievedGroup; var membersPage = retrievedGroupFetcher.Members.Take(5).ExecuteAsync().Result; Console.WriteLine(" Members:"); do { List<IDirectoryObject> members = membersPage.CurrentPage.ToList(); foreach (IDirectoryObject member in members) { if (member is User) { User memberUser = (User)member; Console.WriteLine(" User: {0} ", memberUser.DisplayName); } } membersPage = membersPage.GetNextPageAsync().Result; } while (membersPage != null);
К следующему коду с помощью клиентской библиотеки Microsoft Graph .NET:
var membersPage = client.Groups[id].Members.Request().Top(5).GetAsync().Result; Console.WriteLine(" Members:"); do { List<DirectoryObject> members = membersPage.CurrentPage.ToList(); foreach (DirectoryObject member in members) { if (member is User) { User memberUser = (User)member; Console.WriteLine(" User: {0} ", memberUser.DisplayName); } } if (membersPage.NextPageRequest != null) membersPage = membersPage.NextPageRequest.GetAsync().Result; else membersPage = null; } while (membersPage != null);
Создание и исправление ошибок ресурсов, свойств, навигации и действий службы, связанных с изменением имен.
Консольное приложение фрагментов кода C# выделяет больше различий между клиентской библиотекой Microsoft Graph и клиентской библиотекой Azure AD Graph.
Клиентская библиотека Azure AD Graph поддерживает только платформу .NET. Однако клиентская библиотека Microsoft Graph поддерживает дополнительные платформы и языки.