我有一个 .Net Core 应用程序,用于从 SharePoint 收集文件,然后将这些文件中的数据导入到数据库中。 SharePoint 文件夹会定期更新,我们会再次对文件夹进行爬网以查找文件。一切正常,但有点慢。我们就是这样做的:
虽然这确实有效,但上传到 SharePoint 的文件越多,速度就越慢,因为我仍然需要触摸每个文件以查看是否已导入它。
我知道我可以使用 Microsoft Graph 进行搜索,但我不确定如何进行。我想做类似的事情:
List<string> FileNamesImported
context.xxxxx.where(x => !FileNamesImported.Contains(x.fileName))
它将返回一个驱动器列表,然后我可以用它来获取文件。我需要在 C# 中执行此操作。有谁知道该怎么做吗?
仅供参考 - 我正在使用应用程序权限,并且我知道如何让图形客户端工作。
谢谢!
我们可以使用 Microsoft Search API 来搜索 OneDrive 和 SharePoint 内容。
在 C# 中,我们需要使用 Microsoft Graph SDK 来处理此请求。
抱歉我对C#不太熟悉,所以找到了示例代码供大家参考。
1.设置您的项目:
确保您已安装 Microsoft Graph SDK。 您可以通过 NuGet 包管理器安装它:
Install-Package Microsoft.Graph
2.完整示例:
using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Identity.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
class Program
{
private static string clientId = "YOUR_CLIENT_ID";
private static string[] scopes = { "Files.Read.All", "Sites.Read.All" };
static async Task Main(string[] args)
{
//Use the InteractiveBrowserProvider for authentication
var interactiveBrowserProvider = new InteractiveBrowserProvider(clientId, scopes);
var graphClient = new GraphServiceClient(interactiveBrowserProvider);
//Define the search query to look for files in OneDrive or SharePoint
var searchRequest = new SearchRequestObject
{
Requests = new List<SearchRequest>
{
new SearchRequest
{
EntityTypes = new List<EntityType> { EntityType.DriveItem },
Query = new SearchQuery
{
QueryString = "project report"
}
}
}
};
//Send the search request and handle the response
var searchResponse = await graphClient.Search.Query(searchRequest).Request().PostAsync();
foreach (var result in searchResponse.Value)
{
foreach (var hit in result.HitsContainers.SelectMany(container => container.Hits))
{
Console.WriteLine($"Found file: {hit.Resource.Name} at {hit.Resource.WebUrl}");
}
}
}
}