練習 - 批次載入使用者的電子郵件
在這個練習中,您將延伸應用程式,讓您以 10 個為一組分批載入使用者的電子郵件。
以 10 個為一組分批載入電子郵件
首先,修改 GraphEmailClient
類別以支援載入批次電子郵件。
在程式碼編輯器中,開啟 Graph/GraphEmailClient.cs 檔案。
請花一點時間找出
GetNextLink()
方法。 請注意,它接受名為pagedMessages
的 IUserMessagesCollectionPage 物件做為參數。 它會使用此參數來檢查下一頁要求的 URL 值是否存在。找出
GetUserMessagesPage()
方法,並注意到它接受名為nextPageLink
的參數,代表下一批要檢索之電子郵件的 URL。 此方法也接受名為top
的參數。GetUserMessagesPage()
會返回元物件,其中包含已檢索的郵件和下一批電子郵件的 URL。public async Task<(IEnumerable<Message> Messages, string NextLink)> GetUserMessagesPage( string nextPageLink = null, int top = 10) { }
將
GetUserMessagesPage()
方法中的現存代碼以下列代碼取代: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));
在
try
區塊中插入下列程式碼。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(); }
此代碼會執行下列檢查:
- 如果沒有
nextPageLink
值,則插入的_graphServiceClient
實例會用來檢索郵件的初始批次。 - 如果
nextPageLink
值確實存在,則代碼會透過傳遞nextPageLink
和_graphServiceClient
到新UserMessagesCollectionRequest
實例,以檢索下一個電子郵件批次。
- 如果沒有
在繼續之前,請先儲存 GraphEmailClient。
在您的代碼編輯器中開啟 Pages/Email. cshtml。
以下列項目取代
OnGetAsync()
方法中的代碼,以使用您先前修改的GetUserMessagesPage()
方法:var messagesPagingData = await _graphEmailClient.GetUserMessagesPage(NextLink); Messages = messagesPagingData.Messages; NextLink = messagesPagingData.NextLink; await Task.CompletedTask;
在繼續之前,請先儲存 Email.cshtml.cs。
在代碼編輯器中開啟 Pages/Email.cshtml ,並找到下列代碼。 此代碼區塊會將
NextLink
內容值儲存到頁面。 使用者選取 [下一頁] 按鈕時,連結值會傳遞至伺服器,並用來檢索下一批電子郵件。@if (!String.IsNullOrEmpty(Model.NextLink)) { <a asp-page="/Email" asp-route-nextlink="@Model.NextLink" class="btn btn-primary">Next Page</a> }
執行您的應用程式
執行應用程式之前,請確認用來登錄的帳戶內具有電子郵件。
根據您的代碼編輯器執行下列步驟:
Visual Studio
按 F5 以組建及執行專案。
Visual Studio Code 或另一個程式碼編輯器
在 [ 開始 ] 資料夾中開啟終端視窗, 並執行下列命令:
dotnet run
開啟瀏覽器並前往
https://localhost:5001
。使用您稍早註冊 Microsoft Entra Application 時所使用的 Microsoft 365 開發人員租使用者登入。
選取標頭中的 [電子郵件] 連結,以查看使用者的電子郵件訊息。
當頁面載入時,會顯示使用者的電子郵件訊息。 如果有超過 10 則訊息,您應該會看到頁面底部的 [下一頁] 按鈕。 選取按鈕以查看下一批電子郵件訊息。
注意事項
如果您未看到任何電子郵件訊息, 請確定您用來登入應用程式的帳戶收件匣中有電子郵件。
關閉瀏覽器, 然後在終端機視窗中按 Ctrl+C 以停止伺服器之後再繼續。
注意事項
如果您已在 Visual Studio 中開啟專案, 可以關閉瀏覽器或選取 Visual Studio 中的 Shift + F5, 以停止伺服器。 關閉 Visual Studio 建立的終端視窗 (如果它仍為開啟)。
您已成功示範如何使用 Microsoft Graph 和 ASP.NET Core 存取及顯示登入使用者的 Microsoft 365 電子郵件!