Migrieren der .NET-Clientbibliothek zu Microsoft Graph
Dieser Artikel ist Teil von Schritt 3: Überprüfen von App-Details in der Checklistenreihe zur Planung der Azure AD Graph-App-Migration .
Wenn Ihre App derzeit die Graph-Clientbibliothek von Azure Active Directory (Azure AD) verwendet, wechseln Sie zur Microsoft Graph .NET-Clientbibliothek.
In diesem Artikel erfahren Sie die folgenden allgemeinen Schritte für die Migration zur Microsoft Graph .NET-Clientbibliothek:
- Erstellen eines Microsoft Graph-Clients mit einem Zugriffstoken (das Sie entweder mithilfe der Azure Active Directory-Authentifizierungsbibliothek (ADAL) oder der Microsoft-Authentifizierungsbibliothek (MSAL) abrufen können)
- Formulieren von Anforderungen
- Verwenden von Abfrage-Generatoren
- Behandeln von Sammlungen und Paging
Übersicht über die Migrationsschritte
In den folgenden Schritten wird davon ausgegangen, dass Ihre App ADAL verwendet, um Zugriffstoken zum Aufrufen von Azure AD Graph abzurufen. Der Wechsel zu MSAL kann als separater Schritt durchgeführt werden, der in der Migration zu MSAL beschrieben wird.
Aktualisieren der Ressourcen-URL
Aktualisieren Sie resourceUrl, um ein Zugriffstoken für Microsoft Graph abzurufen.
Von:
https://graph.windows.net
An:
https://graph.microsoft.com
Aktualisieren von Verweisen
Aktualisieren Sie in Ihrer App Verweise auf die Microsoft Graph-Clientbibliothek, indem Sie Folgendes ändern:
Von:
using Microsoft.Azure.ActiveDirectory.GraphClient;
An:
using Microsoft.Graph;
Aktualisieren von Paketen und Abhängigkeiten
Verwenden Sie Ihren Paket-Manager, um das Microsoft Graph-NuGet-Paket herunterzuladen und zu aktualisieren und Abhängigkeiten zu aktualisieren.
Clientkonstruktor aktualisieren
Aktualisieren Sie Ihren Clientkonstruktor, um anstelle von ActiveDirectoryClient
zu GraphServiceClient
erstellen. In den folgenden Codeausschnitten wird davon ausgegangen, dass Ihre App die AcquireTokenAsyncForUser()
-Methode verwendet, um neue Token abzurufen. Eine Definition für diese Methode finden Sie im Beispiel active-directory-dotnet-graphapi-console.
Von:
ActiveDirectoryClient client = new ActiveDirectoryClient(serviceRoot,
async () => await AcquireTokenAsyncForUser());
An:
GraphServiceClient graphClient = new GraphServiceClient(serviceRoot,
new DelegateAuthenticationProvider(async (requestMessage) => {
var token = await AcquireTokenAsyncForUser();
requestMessage.Headers.Authorization = new
AuthenticationHeaderValue("bearer", token);
}));
Für die Microsoft Graph-Clientbibliothek enthält der serviceRoot
Wert auch die Versionsnummer. Derzeit ist https://graph.microsoft.com/v1.0
dieser Wert .
Aktualisieren der Anforderungssyntax
Aktualisieren Sie Anforderungen, um die Syntax des Microsoft Graph-Clientanforderungs-Generators zu verwenden, indem Sie Folgendes ändern:
Von:
signedInUser = (User)await client.Me.ExecuteAsync();
An:
signedInUser = (User)await client.Me.Request().GetAsync();
Die Azure AD Graph-Clientbibliothek unterstützte LINQ-basierte Abfragesyntax. Dies ist in der Microsoft Graph-Clientbibliothek jedoch nicht der Fall. Daher müssen Sie die relevanten Abfragen in einen RESTful-Ausdruck konvertieren. Ändern Sie dazu Folgendes:
Von:
var groups = await
client.Groups.Where(g => g.DisplayName.StartsWith("a")).ExecuteAsync();
An:
var groups = await
client.Groups.Request().Filter("startswith(displayName,'a')").GetAsync();
Verarbeiten von Sammlungen und Paging
Wenn Ihre Codepages Sammlungen durchlaufen, sind Anpassungen erforderlich. Das folgende Beispiel vergleicht und kontrastiert das Abrufen einer Gruppe und das Durchlaufen ihrer Mitglieder ( 5 gleichzeitig). Während der Code für Azure AD Graph ein Fetcher-Konstrukt erfordert, um die Mitglieder einer Gruppe abzurufen, hat Microsoft Graph keine solche Anforderung. Der Code ist abgeschnitten und zeigt nur Benutzermember an, try/catch- und error-Bedingungen werden nicht angezeigt, und die Codeausschnitte gelten für eine Singlethread-Konsolen-App.
Ändern Sie beispielsweise den folgenden Code mithilfe der Azure AD Graph .NET-Clientbibliothek:
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);
Verwenden Sie den folgenden Code, indem Sie die Microsoft Graph .NET-Clientbibliothek verwenden:
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);
Testen, überprüfen, auflösen
Erstellen und beheben Sie alle Ressourcen-, Eigenschafts-, Navigations- und Dienstaktionsfehler im Zusammenhang mit Namensänderungen.
Ressourcen
- Die C#-Konsolenausschnitt-App hebt weitere Unterschiede zwischen der Microsoft Graph-Clientbibliothek und der Azure AD Graph-Clientbibliothek hervor.
- Die Azure AD Graph-Clientbibliothek unterstützt nur die .NET-Plattform. Die Microsoft Graph-Clientbibliothek unterstützt jedoch zusätzliche Plattformen und Sprachen.