无法使用 CSOM C# 控制台应用程序将文件上传到共享点站点的文件目录

问题描述 投票:0回答:1

我正在尝试将文件上传到我组织的 SharePoint 中的特定网站的文件目录。我在

https://OrgTenant.sharepoint.com/sites/MySite/_layouts/15/appregnew.aspx
上创建了一个应用程序。然后,我授予它对
https://OrgTenant.sharepoint.com/sites/MySite/_layouts/15/AppInv.aspx
上网站的 FullControl 权限,XML 权限为

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="https://OrgTenant.sharepoint.com/sites/MySite" Right="FullControl" />
</AppPermissionRequests>

我从应用程序创建中获取了客户端 ID 和 Secret,并在我的 C# 应用程序代码中使用它们(见下文)。我能够连接到该站点并从该站点提取信息(例如列表),并且可以在列表列表中看到我尝试将文件加载到的目录,但在尝试上传文件时出现“拒绝访问”错误文件。我似乎无法在网上找到任何关于原因的文档,这让我彻底陷入困境。如果我遗漏了什么,或者是否有更好的替代方案,请告诉我,因为我愿意接受建议!

代码:

using Microsoft.SharePoint.Client;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace ProjectName
{
    class SharepointHelper
    {
        public static void LoadFilesToSharepoint()
        {
            string siteUrl = "https://OrgTenant.sharepoint.com/sites/MySite";
            using (var cc = new PnP.Framework.AuthenticationManager().GetACSAppOnlyContext(siteUrl, [My Client ID], [My Client Secret]))
            {
                cc.Load(cc.Web, p => p.Title, p => p.Lists);
                cc.ExecuteQuery();
                Web web = cc.Web;

                string libraryName = "FileLocation";
                string filePath = "C:\\Folder\\testFileforSP.txt";
                List<Microsoft.SharePoint.Client.List> doclist = cc.Web.Lists.ToList();
                
                using (FileStream fs = new FileStream(filePath, FileMode.Open))
                {
                    FileCreationInformation flciNewFile = new FileCreationInformation();

                    flciNewFile.ContentStream = fs;
                    flciNewFile.Url = System.IO.Path.GetFileName(filePath);
                    flciNewFile.Overwrite = true;

                    List docs = web.Lists.GetByTitle(libraryName);
                    Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(flciNewFile);

                    cc.Load(uploadFile);
                    cc.ExecuteQuery();
                }
            }
        }
    }
}

我在底部的 cc.ExecuteQuery() 上收到“访问被拒绝”错误。

我尝试授予应用程序其他权限。我最初给了它“写入”权限,然后是“管理”,然后是“完全控制”,因为我看到的大多数示例都只给了应用程序完全控制权,所以我认为这会有所帮助,但事实并非如此。无论我做什么,我都会遇到拒绝访问或未经授权的访问(权限较少)。

c# sharepoint sharepoint-online csom
1个回答
0
投票

弄清楚了,我误解了在您提供 XML 的 AppInv.aspx 页面中授予我的应用程序权限的文档。

我给它的是这个:

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="https://OrgTenant.sharepoint.com/sites/MySite" Right="FullControl" />
</AppPermissionRequests>

我应该在哪里给它:

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" />
</AppPermissionRequests>

这样做可以让您的应用程序完全控制您的网站。您无需在 XML 中输入实际的站点 URL,您必须输入文字字符串才能应用所需的权限。本文档对此进行了解释。 插件权限

希望这能帮助其他被这个问题困扰的人,除非我是唯一一个陷入误解的人! :)

© www.soinside.com 2019 - 2024. All rights reserved.