我是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错误。
我也验证了这篇文章中提到的问题是否不一样,但我认为不是。
当我这样做时,我收到405错误,并且fiddler日志显示请求正在尝试将上下文重定向到身份验证页面。
它有一个我需要启用的设置吗?知道我的麻烦是什么?
由于您已在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.dll
和Microsoft.SharePoint.Client.Runtime.dll
文件。
下载链接 - SharePoint Online Client Components SDK
Nuget包 - Microsoft.SharePointOnline.CSOM
此外,如果您不是传递用户名和密码的粉丝,则可以使用客户端ID和客户端密钥。要使用它,你可以看看我的答案here