簡體   English   中英

從未在 Azure Active Directory Graph API Delta 調用中收到“@odata.nextLink”

[英]Never receiving "@odata.nextLink" in Azure Active Directory Graph API Delta call

我正在嘗試獲取 Azure Active Directory 與 C# 的組中的差異。我需要知道何時刪除或添加用戶。 我用過下面的URL; 來自微軟的教程

我已獲得此 Azure AD 的授權,我收到了更改,但我還應該收到“@odata.nextLink”或“@odata.deltaLink”。 這可以在您下次檢索更改時使用。

有人能幫我嗎? 應該是簡單的東西吧...

您可以在下面找到我的代碼;

`string resource = "https://graph.microsoft.com";
 var scopes = new string[] { "https://graph.microsoft.com/.default" };

var confidentialClient = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithAuthority($"https://login.microsoftonline.com/" + tenantId + "/v2.0")
        .WithClientSecret(clientSecret)
        .Build();

GraphServiceClient graphServiceClient = new GraphServiceClient(
    new DelegateAuthenticationProvider(
        async (requestMessage) => {
            var authResult = await confidentialClient
                .AcquireTokenForClient(scopes)
                .ExecuteAsync();

            requestMessage.Headers.Authorization = new AuthenticationHeaderValue(
            "Bearer",
            authResult.AccessToken
            );
        })
    );

var delta = await graphServiceClient.Groups
    .Delta()
    .Request()
    .Select("displayName,description,members")
    .GetAsync();

return Ok(delta);

這就是響應的樣子; 在此處輸入圖像描述

您可以閱讀@odata.nextLink@odata.deltaLink形式的AdditionalData屬性

delta.AdditionalData.TryGetValue("@odata.deltaLink", out var deltaLink)
delta.AdditionalData.TryGetValue("@odata.nextLink ", out var nextLink)

只是一個提示:

你打電話時

var deltaPage = await graphServiceClient.Groups
    .Delta().Request().Select("displayName,description,members")
    .GetAsync();

結果的類型是IGroupDeltaCollectionPage並且您可以迭代所有頁面以獲取代碼中的所有組

var deltaPage = await graphServiceClient.Groups
    .Delta().Request().Select("displayName,description,members")
    .GetAsync();

deltaPage.AdditionalData.TryGetValue("@odata.deltaLink", out var deltaLink)

var groups = new List<Group>();

groups.AddRange(deltaPage.CurrentPage);
while (deltaPage.NextPageRequest != null)
{
    deltaPage = await deltaPage.NextPageRequest.GetAsync();
    groups.AddRange(deltaPage.CurrentPage);
}

也許有點不一樣。 這是我的測試。

當我通過 http 請求進行測試時,它有"@odata.context@odata.nextLink"

在此處輸入圖像描述

當我訪問 nextLink 提供的nextLink時,我會得到deltaLink

在此處輸入圖像描述

然后轉到 SDK,我無法在AdditionalData中獲取nextLink ,但我可以在NextPageRequest變量中獲取下一頁請求:

在此處輸入圖像描述

當 AdditionalData 沒有響應時,我可以獲得deltaLink

在此處輸入圖像描述

所以恐怕你可以按照我的代碼片段再次測試:

var delta = await _graphServiceClient.Users.Delta().Request().GetAsync();

            var queryOptions = new List<QueryOption>()
            {
                new QueryOption("$skiptoken", delta.NextPageRequest.QueryOptions[0].Value)
            };

            var delta2 = await _graphServiceClient.Users
                .Delta()
                .Request(queryOptions)
                .GetAsync();

我還測試了客戶端憑證流,它具有相同的行為:

在此處輸入圖像描述 在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM