Übung – Laden der E-Mails eines Benutzers in Batches

Abgeschlossen

In dieser Übung erweitern Sie die App, damit Sie die E-Mails eines Benutzers in Batches von 10 Elementen laden können.

Laden von E-Mails in Batches von 10 E-Mails pro Seite

Ändern Sie zunächst die GraphEmailClient-Klasse so, dass das Laden von Batches von E-Mails unterstützt wird.

  1. Öffnen Sie in Ihrem Code-Editor die Datei Graph/GraphEmailClient.cs.

  2. Nehmen Sie sich etwas Zeit, um nach der GetNextLink()-Methode zu suchen. Beachten Sie, dass ein IUserMessagesCollectionPage-Objekt mit Namen pagedMessages als ein Parameter akzeptiert wird. Dieser Parameter wird verwendet, um zu überprüfen, ob ein URL-Wert für eine Nächste-Seite-Anforderung vorhanden ist.

  3. Suchen Sie die GetUserMessagesPage()-Methode. Wie Sie feststellen werden, akzeptiert sie einen Parameter namens nextPageLink, der die URL des nächsten abzurufenden Batches von E-Mails darstellt. Die Methode akzeptiert auch einen Parameter namens top. GetUserMessagesPage() gibt ein Tupelobjekt zurück, das die abgerufenen Nachrichten und die URL für den nächsten E-Mail-Batch enthält.

    public async Task<(IEnumerable<Message> Messages,
      string NextLink)> GetUserMessagesPage(
        string nextPageLink = null, int top = 10)
    {
    
    }
    
  4. Ersetzen Sie den vorhandenen Code in der GetUserMessagesPage()-Methode durch folgenden Code:

    IUserMessagesCollectionPage pagedMessages;
    
    try
    {
    }
    catch (Exception ex)
    {
      _logger.LogError($"Error calling Graph /me/messages to page messages: {ex.Message}");
      throw;
    }
    
    return (Messages: pagedMessages,
            NextLink: GetNextLink(pagedMessages));
    
  5. Fügen Sie den nachstehenden Code im try-Block hinzu.

    if (nextPageLink == null)
    {
      // Get initial page of messages
      pagedMessages = await _graphServiceClient.Me.Messages
              .Request()
              .Select(msg => new
              {
                  msg.Subject,
                  msg.BodyPreview,
                  msg.ReceivedDateTime
              })
              .Top(top)
              .OrderBy("receivedDateTime desc")
              .GetAsync();
    }
    else
    {
      // Use the next page request URI value to get the page of messages
      var messagesCollectionRequest = new UserMessagesCollectionRequest(nextPageLink, _graphServiceClient, null);
      pagedMessages = await messagesCollectionRequest.GetAsync();
    }
    

    Durch diesen Code werden die folgenden Überprüfungen ausgeführt:

    • Wenn kein nextPageLink-Wert vorhanden ist, wird die in die Klasse eingefügte _graphServiceClient-Instanz verwendet, um den ersten Batch von Nachrichten abzurufen.
    • Wenn ein nextPageLink-Wert vorhanden ist, ruft der Code den nächsten Batch von E-Mails durch Übergeben von nextPageLink und _graphServiceClient an eine neue Instanz von UserMessagesCollectionRequest ab.
  6. Speichern Sie GraphEmailClient.cs, bevor Sie fortfahren.

  7. Öffnen Sie Pages/Email.cshtml.cs in Ihrem Code-Editor.

  8. Ersetzen Sie den Code in der OnGetAsync()-Methode durch Folgendes, um die von Ihnen zuvor geänderte GetUserMessagesPage()-Methode zu verwenden:

    var messagesPagingData = await _graphEmailClient.GetUserMessagesPage(NextLink);
    Messages = messagesPagingData.Messages;
    NextLink = messagesPagingData.NextLink;
    await Task.CompletedTask;
    
  9. Speichern Sie Email.cshtml.cs, bevor Sie fortfahren.

  10. Öffnen Sie Pages/Email.cshtml in Ihrem Code-Editor, und suchen Sie den folgenden Code. Dieser Codeblock verarbeitet das Speichern des NextLink-Eigenschaftswerts auf der Seite. Wenn der Benutzer die Schaltfläche Nächste Seite auswählt, wird der Linkwert an den Server übergeben und zum Abrufen des nächsten Batches von E-Mails verwendet.

    @if (!String.IsNullOrEmpty(Model.NextLink)) {
        <a asp-page="/Email" asp-route-nextlink="@Model.NextLink"
          class="btn btn-primary">Next Page</a>
    }
    

Ausführen Ihrer App

Stellen Sie vor dem Ausführen der Anwendung sicher, dass das Konto, das für die Anmeldung verwendet wurde, einige E-Mails enthält.

  1. Führen Sie den folgenden Schritt je nach verwendetem Code-Editor aus:

    • Visual Studio

      Drücken Sie die F5-TASTE, um das Projekt zu erstellen und auszuführen.

    • Visual Studio Code oder einen anderen Code-Editor

      Öffnen Sie im Ordner Begin ein Terminalfenster und führen Sie den folgenden Befehl aus:

      dotnet run
      
  2. Öffnen Sie einen Browser, und navigieren Sie zu https://localhost:5001.

  3. Melden Sie sich mit dem Microsoft 365-Entwicklermandanten an, den Sie zuvor bei der Registrierung der Microsoft Entra-Anwendung verwendet haben.

  4. Klicken Sie auf den Link E-Mails im Header, um die E-Mails des Benutzers anzuzeigen.

  5. Wenn die Seite geladen wird, werden die E-Mail-Nachrichten des Benutzers angezeigt. Wenn mehr als 10 Nachrichten vorhanden sind, sollte unten auf der Seite eine Schaltfläche Nächste Seite angezeigt werden. Klicken Sie auf die Schaltfläche, um den nächsten Batch von E-Mail-Nachrichten anzuzeigen.

    Seite mit E-Mail-Nachrichten, die von Microsoft Graph abgerufen wurden

    Hinweis

    Wenn keine E-Mails angezeigt werden, vergewissern Sie sich, dass sich E-Mails im Posteingang des Kontos befinden, das Sie für die Anmeldung in der App verwenden.

  6. Schließen Sie Ihren Browser, und drücken Sie vor dem Fortfahren im Terminalfenster STRG+C, um den Server zu beenden.

    Hinweis

    Wenn Sie das Projekt in Visual Studio geöffnet haben, können Sie den Browser schließen, oder UMSCHALT+F5 in Visual Studio auswählen, um den Server zu stoppen. Schließen Sie das von Visual Studio erstellte Terminalfenster, falls es noch geöffnet ist.

Sie haben erfolgreich demonstriert, wie Sie mit Microsoft Graph und ASP.NET Core auf 365-Kalenderereignisse für einen angemeldeten Benutzer zugreifen und diese anzeigen können.