【问题标题】:Access denied when downloading file from Sharepoint CSOM从 Sharepoint CSOM 下载文件时访问被拒绝
【发布时间】:2018-10-10 15:43:17
【问题描述】:

我正在尝试从客户端 Sharepoint 站点下载文件。我正在使用共享点 CSOM。

我的代码如下:

using Microsoft.SharePoint.Client;

var username = "username";
var password = "pass";

var url = "https://myclient.sharepoint.com/";
var fileurl = "https://myclient.sharepoint.com/teams/folder1/folder%20x/somefile.docx";
using (ClientContext context = new ClientContext(url))
{    
    SecureString passWord = new SecureString();
    foreach (char c in password.ToCharArray()) passWord.AppendChar(c);
    context.Credentials = new SharePointOnlineCredentials(username, passWord);

    Uri filename = new Uri(fileurl);
    string server = filename.AbsoluteUri.Replace(filename.AbsolutePath, "");
    string serverrelative = filename.AbsolutePath;

    Microsoft.SharePoint.Client.File file = context.Web.GetFileByServerRelativeUrl(serverrelative);
    context.Load(file);
    ClientResult<Stream> streamResult = file.OpenBinaryStream();
    context.ExecuteQuery();
    var file2 = streamResult.Value;
}

问题是我被拒绝访问,但是当我使用相同的凭据登录时,我可以成功下载文件。

  • Sharepoint 中是否有从 API 而不是 UI 下载文件的单独权限?
  • 文件夹名称中的空格是否有问题?

更新

已验证这与文件夹或文件名中的空格无关。

【问题讨论】:

    标签: c# sharepoint csom


    【解决方案1】:

    如果 SharePoint 网站使用 multiple authentication providers using a set of Windows credentials(也与 SharePoint Online 相关),则附加标头必须包含在请求中:X-FORMS_BASED_AUTH_ACCEPTED,其值为 f

    对于ClientContext class,可以像这样包含标题:

    ctx.ExecutingWebRequest += (sender, e) =>
    {
        e.WebRequestExecutor.WebRequest.Headers["X-FORMS_BASED_AUTH_ACCEPTED"] = "f";
    };
    

    例子

    var file = ctx.Web.GetFileByUrl(fileAbsUrl);
    ctx.Load(file);
    var streamResult = file.OpenBinaryStream();
    ctx.ExecuteQuery();
    
    
    //save into file
    using (var fileStream = System.IO.File.Create(@"C:\path\filename.docx"))
    {
       streamResult.Value.Seek(0, SeekOrigin.Begin);
       streamResult.Value.CopyTo(fileStream);
    }
    

    注意:使用GetFileByUrl method而不是转换为相对url,它接受absolute url

    【讨论】:

    • 我很难找到这个 GetFileByUrl 方法。我在 MS Docs 上看到它,但我尝试下载的每个 sharepoint 客户端 nuget 包都缺少它。
    【解决方案2】:

    问题是我没有连接到正确的 url (new ClientContext(url))

    我正在连接到:https://myclient.sharepoint.com/

    我应该连接到:https://myclient.sharepoint.com/teams/folder1/

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2022-01-27
      • 2016-04-28
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多