Перенос использования клиентской библиотеки .NET в Microsoft Graph
Эта статья является частью шага 3. Просмотр сведений о приложении в серии контрольных списков планирования миграции приложений Azure AD Graph.
Если в настоящее время в приложении используется клиентская библиотека 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.
Обновление URL-адреса ресурса
Чтобы получить маркер доступа к 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 поддерживает дополнительные платформы и языки.