无法在线使用Sharepoint的SaveBinaryDirect始终返回403

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

我是SharePoint新手,

我试图通过c#代码在文档库中上传图片。

有我的代码

string webUrl = "https://mysharepointesite.sharepoint.com/";



  string targetSite = webUrl;
  using (ClientContext ctx = ClaimClientContext.GetAuthenticatedContext(targetSite))
  {
    if (ctx != null)
    {
      var lib = ctx.Web.Lists.GetByTitle("mesdocuments");
      ctx.Load(lib);
      ctx.Load(lib.RootFolder);
      ctx.ExecuteQuery();
      string sourceUrl = "C:\\temp\\picture.jpg";          
      using (FileStream fs = new FileStream(sourceUrl, FileMode.Open, FileAccess.Read))
      {
        Microsoft.SharePoint.Client.File.SaveBinaryDirect (ctx, lib.RootFolder.ServerRelativeUrl + "/myPicture.jpg", fs, true);
      }
    }

但我总是得到403错误。

我也验证了这篇文章中提到的问题是否不一样,但我认为不是。

https://razirais.wordpress.com/2011/05/19/how-to-fix-sharepoint-online-403-forbidden-error-while-downloading-files-using-client-object-model/

当我这样做时,我收到405错误,并且fiddler日志显示请求正在尝试将上下文重定向到身份验证页面。

它有一个我需要启用的设置吗?知道我的麻烦是什么?

.net sharepoint shared-libraries sharepoint-online sharepoint-clientobject
1个回答
2
投票

由于您已在SharePoint联机中对其进行了标记,因此我假设您仅在线使用SharePoint。

您需要将用户名和密码传递给ClientContext。因此,修改您的代码如下:

string webUrl = "https://mysharepointesite.sharepoint.com/";

string userName = "[email protected]";
string password = "password";

using (ClientContext ctx = new ClientContext(webUrl))
{
    SecureString securePassword = new SecureString();
    foreach (char c in password.ToCharArray())
    {
        securePassword.AppendChar(c);
    }   

    ctx.AuthenticationMode = ClientAuthenticationMode.Default;
    ctx.Credentials = new SharePointOnlineCredentials(userName, securePassword);

    if (ctx != null)
    {
      var lib = ctx.Web.Lists.GetByTitle("mesdocuments");
      ctx.Load(lib);
      ctx.Load(lib.RootFolder);
      ctx.ExecuteQuery();
      string sourceUrl = "C:\\temp\\picture.jpg";          
      using (FileStream fs = new FileStream(sourceUrl, FileMode.Open, FileAccess.Read))
      {
        Microsoft.SharePoint.Client.File.SaveBinaryDirect (ctx, lib.RootFolder.ServerRelativeUrl + "/myPicture.jpg", fs, true);
      }
    }

}

此外,请确保使用正确的CSOM dll,即使用SharePoint在线CSOM SDK。看看你当前的实现,我认为你正在使用错误的客户端上下文导致错误。

您可以从下面提到的链接或使用Nuget(首选)下载最新的SDK。

如果您下载SDK,则可能需要从安装它的文件夹中手动引用dll。

通常,如果安装在C:驱动器中,则位置为:

C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI

从那里,您需要在项目中引用Microsoft.SharePoint.Client.dllMicrosoft.SharePoint.Client.Runtime.dll文件。

下载链接 - SharePoint Online Client Components SDK

Nuget包 - Microsoft.SharePointOnline.CSOM

此外,如果您不是传递用户名和密码的粉丝,则可以使用客户端ID和客户端密钥。要使用它,你可以看看我的答案here

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