[英]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.