我是SharePoint新手,
我正在尝试通过c#代码在文档库中上传图片。
有我的代码
# Configure Registry Keys
powershell_script 'Configure Registry Keys' do
code <<-EOH
# Set the default location for data files
Set-ItemProperty -Path "HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer" -Name DefaultData -Value "D:\\Program Files\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQL\\DATA"
# Set the default location for log files
Set-ItemProperty -Path "HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer" -Name DefaultLog -Value "L:\\Program Files\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQL\\DATA"
# Set the default location for backup files
Set-ItemProperty -Path "HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer" -Name BackupDirectory -Value "B:\\sqlbackups"
restart-service *sql* -force
EOH
guard_interpreter :powershell_script
not_if "(Get-ItemProperty \"HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer\").PSObject.Properties.Name -contains \"DefaultData\""
not_if "(Get-ItemProperty \"HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer\").PSObject.Properties.Name -contains \"DefaultLog\""
not_if "(Get-ItemProperty \"HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer\").PSObject.Properties.Name -contains \"BackupDirectory\""
end
但我总是得到403错误。
我还要验证这篇文章中是否提到了相同的问题,但我认为不是。
当我这样做时,我收到405错误,并且fiddler日志显示请求正在尝试将上下文重定向到身份验证页面。
它有一个我需要启用的设置吗?知道我的麻烦是什么吗?
答案 0 :(得分:2)
由于您已在SharePoint中对其进行了标记,因此我假设您仅在线使用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,则可能需要从安装它的文件夹中手动引用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