为什么我的 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(List
1 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 版本不匹配的文档时从配置中删除了“站点”。)
我正在尝试在网站 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(List
1 orderNumbers) in C:\projects\SharepointOrderContractExtractor\SharepointOrderContractExtractor\Services\SharepointService.cs:line 128 at SharePointOrderContractExtractor.Services.SharePointService.CollectForAsync(List
1 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 版本不匹配的文档时从配置中删除了“站点”。)