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