It's definitely broken. That said I found a way to use the search API to get the item, but it's still a mess, IMHO. In my case I am used a shared folder in the same tenant, so if using a remote item your mileage may vary. Note the DriveItem isn't a folder type anymore.
Old (Broken) Code:
var drives = await _graphClient!.Me.Drive.GetAsync(config =>
config.QueryParameters.Select = ["id"]);
var children = (await
_graphClient.Drives[drives!.Id].SharedWithMe.GetAsSharedWithMeGetResponseAsync(config =>
{
config.QueryParameters.Select = ["id", "Name", "Folder", "remoteItem"];
}))?.Value;
var item = children?.FirstOrDefault(i => i.Folder != null && i.Name == folderName);
if (item == null) return;
var remoteDriveId = item!.RemoteItem?.ParentReference?.DriveId;
var folderItems = (await
_graphClient.Drives[remoteDriveId].Items[item.Id].Children.GetAsync(
{
config.QueryParameters.Orderby = ["lastModifiedDateTime desc"];
config.QueryParameters.Select = ["id", "name", "lastModifiedDateTime"];
}))?.Value;
New (Working) Code:
var searchResponse = await _graphClient!.Search.Query.PostAsQueryPostResponseAsync(
new Microsoft.Graph.Search.Query.QueryPostRequestBody
{
Requests =
[
new Microsoft.Graph.Models.SearchRequest
{
EntityTypes = [Microsoft.Graph.Models.EntityType.DriveItem],
Query = new Microsoft.Graph.Models.SearchQuery
{
QueryString = $"{folderName}", QueryTemplate = "FileName:{searchTerms}"
},
Fields = ["Id","ParentReference"],
Size = 1 // Assumes I know what I'm doing here
}
]
});
if (searchResponse?.Value?[0]?.HitsContainers?[0]?.Hits?.SingleOrDefault()?.Resource is not Microsoft.Graph.Models.DriveItem item) return;
var remoteDriveId = item!.ParentReference?.DriveId;
var folderItems = (await
_graphClient.Drives[remoteDriveId].Items[item.Id].Children.GetAsync(config =>
{
config.QueryParameters.Orderby = ["lastModifiedDateTime desc"];
config.QueryParameters.Select = ["id", "name", "lastModifiedDateTime"];
}))?.Value;