为什么我的 C# 在 SharePoint 上找不到任何列表?

Why can't my C# find any lists on SharePoint?

我正在尝试在网站 url https://example.sharepoint.com/MySite

的 Online SharePoint 上创建一个文件夹

我真的不关心 SharePoint 列表,但我找不到任何关于 SharePoint API 的信息,它向消费者隐藏了这个实现细节,也找不到任何足够好地预测我的需求的文档告诉我需要做什么,所以我正在努力使用列表。

目前,我只想简单地列出我网站上存在的所有列表。我的网站有一些简约的内容,所以我希望世界上所有东西都有列表,应该有一些列表,我应该能够以某种方式列出它们。

我有以下代码:

            using (ClientContext context = _authenticationManager.GetContext())
            {
                Web web = context.Web;
                context.Load(web.Lists, lists => lists.Include(list => list.Title, list => list.Id));
                context.ExecuteQuery();

                foreach (List list in web.Lists)
                {
                    _logger.LogInformation(list.Title);
                }
            }

我已经能够使用调试器和控制台来确认 AuthenticationManager 已成功生成身份验证令牌。

当代码执行时,context.ExecuteQuery(); 导致以下错误:

[14:49:48 INF] Successfully requested new access token resource example.sharepoint.com for user someuser@somemail.foo <s:SharepointOrderContractExtractor.Clients.AuthenticationManager> [14:49:48 ERR] An unhandled exception has occurred while executing the request. <s:Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware> System.Net.WebException: The remote server returned an error: (404) Not Found. at System.Net.HttpWebRequest.GetResponse() at Microsoft.SharePoint.Client.SPWebRequestExecutor.Execute() at Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer(ChunkStringBuilder sb) at Microsoft.SharePoint.Client.ClientRequest.ExecuteQuery() at Microsoft.SharePoint.Client.ClientRuntimeContext.ExecuteQuery() at Microsoft.SharePoint.Client.ClientContext.ExecuteQuery() at SharePointOrderContractExtractor.Clients.Client.CreateFolder(String folderName) in C:\projects\SharepointOrderContractExtractor\SharepointOrderContractExtractor\Clients\Sharepoint\Client.cs:line 34 at SharePointOrderContractExtractor.Services.SharePointService.CreateDestination(List1 orderNumbers) in C:\projects\SharepointOrderContractExtractor\SharepointOrderContractExtractor\Services\SharepointService.cs:line 128 at SharePointOrderContractExtractor.Services.SharePointService.CollectForAsync(List1 orderNumbers) in C:\projects\SharepointOrderContractExtractor\SharepointOrderContractExtractor\Services\SharepointService.cs:line 95 at SharePointOrderContractExtractor.Services.SharePointService.FetchContractsAsync(FileUploadModel uploadModel) in C:\projects\SharepointOrderContractExtractor\SharepointOrderContractExtractor\Services\SharepointService.cs:line 51 at SharePointOrderContractExtractor.Controllers.V1_0.SharePointController.Upload(FileUploadModel uploadModel) in C:\projects\SharepointOrderContractExtractor\SharepointOrderContractExtractor\Controllers\V1_0\SharepointController.cs:line 48 at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Logged|12_1(ControllerActionInvoker invoker) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker) at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

我错过了什么 and/or 做错了什么? 我该如何纠正?

感谢@arconaut 在评论中提出的问题:

似乎身份验证管理器只使用域,而不是完整的 URL 来进行身份验证。

虽然我的站点 URL 设置为 https://example.sharepoint.com/MySite, it should have been https://example.sharepoint.com/sites/MySite

(我想我在尝试遵循一些可能与我的 Salesforce 版本不匹配的文档时从配置中删除了“站点”。)