Migrieren der .NET-Clientbibliothek zu Microsoft Graph

Dieser Artikel ist Teil von Schritt 3: Überprüfen der App-Details zum Prozess zum Migrieren von Apps.

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.

  1. Aktualisieren Sie resourceUrl von auf , um ein Zugriffstoken für https://graph.windows.net Microsoft Graph abzurufen https://graph.microsoft.com.

  2. Aktualisieren Sie in Ihrer App Verweise auf die Microsoft Graph-Clientbibliothek, indem Sie Folgendes ändern:

    using Microsoft.Azure.ActiveDirectory.GraphClient;
    

    An:

    using Microsoft.Graph;
    
  3. Verwenden Sie Ihren Paket-Manager, um das Microsoft Graph-NuGet-Paket herunterzuladen und zu aktualisieren und Abhängigkeiten zu aktualisieren.

  4. Aktualisieren Sie Ihren Clientkonstruktor, um anstelle von zu GraphServiceClientActiveDirectoryClienterstellen. 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.

    Veränderung:

    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.0dieser Wert .

  5. Aktualisieren Sie Anforderungen, um die Syntax des Microsoft Graph-Clientanforderungs-Generators zu verwenden, indem Sie Folgendes ändern:

    signedInUser = (User)await client.Me.ExecuteAsync();
    

    An:

    signedInUser = (User)await client.Me.Request().GetAsync();
    

    Hinweis

    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:

    var groups = await
    client.Groups.Where(g => g.DisplayName.StartsWith("a")).ExecuteAsync();
    

    An:

    var groups = await
    client.Groups.Request().Filter("startswith(displayName,'a')").GetAsync();
    
  6. Wenn Ihre Codepages Sammlungen durchlaufen, nehmen Sie die folgenden geringfügigen Anpassungen vor. 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. Um präzise zu sein, werden nur Benutzermitglieder angezeigt, 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);
    
    
  7. Erstellen und beheben Sie alle Ressourcen-, Eigenschafts-, Navigations- und Dienstaktionsfehler im Zusammenhang mit Namensänderungen.

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.

Nächster Schritt