我是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日志显示该请求试图将上下文重定向到身份验证页面。
我需要启用一个设置吗?知道我有什么问题吗?
由于您已在SharePoint online中对其进行了标记,因此我假设您仅在线使用SharePoint。
您需要将用户名和密码传递给ClientContext
。因此,修改您的代码如下:
string webUrl = "https://mysharepointesite.sharepoint.com/";
string userName = "user.name@tenantname.onmicrosoft.com";
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,则可能需要手动引用安装该SDK的文件夹中的dll。
通常,如果安装在C:
驱动器中,位置为:
C:Program FilesCommon Filesmicrosoft sharedWeb Server Extensions16ISAPI
。
从那里,您需要引用项目中的Microsoft.SharePoint.Client.dll
和Microsoft.SharePoint.Client.Runtime.dll
文件。
下载链接-SharePoint Online客户端组件SDK
Nuget包-Microsoft.SharePointOnline.CSOM
此外,如果您不喜欢传递用户名和密码,则可以使用客户端id和客户端机密。要使用它,你可以在这里查看我的答案