.NET Core 的 Sharepoint CSOM 身份验证问题

Ste*_* R. 5 c# sharepoint csom sharepoint-online .net-core

我是在线 Sharepoint 的新手,还没有自己的帐户,只有来自客户的用户名/密码。

需要构建一个从 Sharepoint 获取文件夹结构和档案的服务。然后允许上传/下载档案。

由于包

Microsoft.SharePointOnline.CSOM

与 .NET Core 不兼容,我使用的这个 github 解决方案似乎以同样的方式涵盖了主要功能:https : //github.com/OneBitSoftware/NetCore.CSOM

我认为到目前为止没有任何问题 - 但是当尝试使用连接时

SharePointOnlineCredentials

...我收到错误

PPCRL_REQUEST_E_PARTNER_HAS_NO_ASYMMETRIC_KEY

所以我想服务器端缺少一些帐户设置?还是我遵循了错误的方法?我在实现 OAuth 访问以获取不记名令牌时没有问题,但那是哪个 API,我如何为 Sharepoint 注册应用程序?

我对 API 和这个特定错误的研究还没有产生任何结果,所以我在这里寻求帮助。

Adr*_*ski 6

获取 NuGet 包TTCUE.NetCore.SharepointOnline.CSOM .16.1.8029.1200。您还可以下载官方软件包 Microsoft.SharePointOnline.CSOM,但它会将错误的 dll 附加到您的项目,您需要根据此处不同答案中的链接更改它们 - https://rajujoseph.com/getting-net- core-and-sharepoint-csom-play-nice/

注意 - 您的 .NET Core 项目可以编译,但这并不意味着它可以在例如 linux 上运行。那些 CSOM dll 还没有完成,微软仍在研究它们。(很长一段时间......)


小智 2

检查下面的示例:

  1. 创建 .NET Core 控制台应用程序。

  2. 添加参考文献:Microsoft.SharePoint.Client.Portable.dllMicrosoft.SharePoint.Client.Runtime.Portable.dllMicrosoft.SharePoint.Client.Runtime.Windows.dll

    注意:如果项目引用了Microsoft.SharePoint.Client.dllMicrosoft.SharePoint.Client.Runtime.dll,请删除它们。

    可以通过将 CSOM 库安装到另一个项目中,然后导航到文件目录中已安装的 nuget 包来访问这些引用: c:\Users\user\\.nuget\packages\microsoft.sharepointonline.csom\\(version)\lib\netcore45

  3. 将以下代码添加到 .NET Core 2.0 控制台应用程序:

using System;
using Microsoft.SharePoint.Client;

namespace ConsoleApp1 {
    class Program {
        static void Main(string[] args) {
            string targetSiteURL = @"https://xxx.sharepoint.com/sites/xxx";

            var login = "xxx@xx.onmicrosoft.com";
            var password = "xxx";

            SharePointOnlineCredentials onlineCredentials = new SharePointOnlineCredentials(login, password);

            ClientContext ctx = new ClientContext(targetSiteURL);

            ctx.Credentials = onlineCredentials;

            WebCreationInformation wci = new WebCreationInformation();
            wci.Url = "Site1"; // This url is relative to the url provided in the context
            wci.Title = "Site 1";
            wci.UseSamePermissionsAsParentSite = true;
            wci.WebTemplate = "STS#0";
            wci.Language = 1033;

            var newWeb = ctx.Web.Webs.Add(wci);
            ctx.Load(newWeb, w => w.Title);
            ctx.ExecuteQueryAsync();
            Console.WriteLine("Web title:" + newWeb.Title);
            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

详细信息:让 .NET Core 和 SharePoint CSOM 发挥良好作用