![](/img/trans.png)
[英]Getting Microsoft Graph Drive items by path using the .NET SDK
[英]When querying drive items using Microsoft Graph, CreatedBy.User property is sometimes null
我正在从多个 SharePoint Online 网站的默认文档库中检索驱动器项目。 除其他外,我需要CreatedBy.User
属性中的用户信息。
对于某些站点,我可以毫无问题地访问该属性,但对于一个站点,代码崩溃,因为该属性为空。 巧合的是,这发生在具有最多驱动器项目的站点上。
这些是相关的代码部分。
var items = await GetChildren(_client.Sites[siteId].Drive.Root.Children).ToListAsync();
private static async IAsyncEnumerable<DriveItem> GetChildren(IDriveItemChildrenCollectionRequestBuilder builder)
{
var page = builder.Request()
.Expand(d => d.ListItem)
.GetAsync().Result;
foreach (var driveItem in page)
{
yield return driveItem;
}
while (page.NextPageRequest is not null)
{
page = await page.NextPageRequest.GetAsync();
foreach (var driveItem in page)
{
yield return driveItem;
}
}
}
如何强制请求始终包含CreatedBy.User
信息? 当我另外请求该特定属性时,它确实可以工作,但是进行如此多的单独调用并不是一个真正的选择。 该文档库中的项目太多了。
driveItem
资源具有createdByUser
关系,这是创建该项目的用户的身份。
您可以展开createdByUser
以避免额外的请求。
...
var page = builder.Request()
.Expand("listItem,createdByUser")
.GetAsync().Result;
...
无需为每个CreatedBy
发送请求即可使其工作,尽管我对解决方案并不感到兴奋。
事实证明,至少对于该特定站点,仅当我展开ListItem
时CreatedBy.User
才为空。 如果我遗漏了Expand
, CreatedBy.User
会很好地返回。
所以我决定收集所有ListItems
,除了DriveItems
。
private async IAsyncEnumerable<ListItem> GetListItems(IListItemsCollectionRequestBuilder builder)
{
var page = await builder
.Request()
.Expand("fields")
.GetAsync();
foreach (var listItem in page)
{
yield return listItem;
}
while (page.NextPageRequest is not null)
{
page = await page.NextPageRequest.GetAsync();
foreach (var listItem in page)
{
yield return listItem;
}
}
}
在查看DriveItem
时,我从列表中拉出匹配的ListItem
。 这样我就可以得到我需要的所有信息。 它有效,但我更喜欢扩展ListItem
的选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.