You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CSOM C#控制台应用上传文件至SharePoint站点目录时遇访问拒绝问题

SharePoint文件上传Access Denied问题排查与解决方案

可能的原因及排查步骤

1. 应用权限未正确生效或范围不足

  • 确认站点应用权限已批准:进入站点设置 → 应用权限,检查你的应用是否已被列出,权限为FullControl且AllowAppOnlyPolicy=true。若AppInv提交后未完成管理员批准,权限不会生效。
  • 尝试缩小权限范围到文档库:将权限XML的Scope改为库级路径,比如:
    <AppPermissionRequests AllowAppOnlyPolicy="true">
      <AppPermissionRequest Scope="https://OrgTenant.sharepoint.com/sites/MySite/Lists/FileLocation" Right="FullControl" />
    </AppPermissionRequests>
    
    重新在AppInv页面授权,避免站点级权限被库的自定义权限覆盖。

2. 租户ACS权限限制

部分租户会禁用ACS(Access Control Service)的写权限,仅保留读权限:

  • 联系租户管理员,在SharePoint管理中心 → 设置 → 应用程序 → 配置应用程序权限,确认「允许仅应用权限」和「允许ACS仅应用权限」处于开启状态。若禁用,ACS应用将无法执行写操作。

3. 文档库权限继承被打破

如果目标库的权限继承已断开,即使站点给了应用权限,库本身可能未继承:

  • 进入文档库设置 → 权限管理,检查是否「继承权限」已关闭。若关闭,需手动添加应用到库的权限列表,授予FullControl。

代码优化方案

修正现有ACS认证代码

确保加载库的RootFolder后再执行上传,避免权限验证问题:

using Microsoft.SharePoint.Client;
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();

                string libraryName = "FileLocation";
                string filePath = "C:\\Folder\\testFileforSP.txt";
                
                // 加载库的RootFolder
                var docs = cc.Web.Lists.GetByTitle(libraryName);
                cc.Load(docs, d => d.RootFolder);
                cc.ExecuteQuery();

                using (FileStream fs = new FileStream(filePath, FileMode.Open))
                {
                    FileCreationInformation flciNewFile = new FileCreationInformation
                    {
                        ContentStream = fs,
                        Url = Path.GetFileName(filePath),
                        Overwrite = true
                    };

                    var uploadFile = docs.RootFolder.Files.Add(flciNewFile);
                    cc.Load(uploadFile);
                    cc.ExecuteQuery();
                }
            }
        }
    }
}

推荐:切换到Azure AD应用权限(替代ACS)

ACS已被微软标记为弃用,改用Azure AD应用权限更稳定:

  1. 在Azure AD注册应用,授予Sites.FullControl.All应用权限并管理员同意。
  2. 使用PnP的Azure AD认证方式:
using PnP.Framework;
using Microsoft.SharePoint.Client;
using System.IO;

namespace ProjectName
{
    class SharepointHelper
    {
        public static void LoadFilesToSharepoint()
        {
            string siteUrl = "https://OrgTenant.sharepoint.com/sites/MySite";
            string clientId = "[Azure AD Client ID]";
            string clientSecret = "[Azure AD Client Secret]";
            string tenantId = "[Tenant ID]"; // 格式如xxx.onmicrosoft.com或租户GUID

            using (var cc = new AuthenticationManager().GetAzureADAppOnlyContext(siteUrl, clientId, clientSecret, tenantId))
            {
                string libraryName = "FileLocation";
                string filePath = "C:\\Folder\\testFileforSP.txt";

                // 使用PnP扩展方法简化上传
                cc.Web.UploadFileToLibrary(filePath, libraryName, true);
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Jaelen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:37:06