I am new to the SharePoint API. I am trying to create folders in a customer SharePoint solution.
Problem is i'm getting a 403 return. My request.:
POST https://companyname.sharepoint.com/sites/Test/_api/Web/GetFolderByServerRelativePath(decodedurl='/sites/Test/Syra_Test') HTTP/1.1
X-FORMS_BASED_AUTH_ACCEPTED: f
X-RequestDigest:xxxxxxx,28 Apr 2021 10:03:46 -0000
X-HTTP-Method: POST
Cookie: SPOIDCRL=xxxxxxxx
Authorization:
Host: companyname.sharepoint.com
Content-Length: 69
Expect: 100-continue
{'__metadata': {'type':'SP.Folder'},'ServerRelativeUrl': '/syraHest'}
My response.:
<?xml version="1.0" encoding="utf-8"?><m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><m:code>-2130575251, System.Runtime.InteropServices.COMException</m:code><m:message xml:lang="en-US">The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again.</m:message></m:error>
Here is my code.:
WebClient client = new WebClient();
string USER = "[email protected]";
SecureString passWord = new SecureString();
string PWD = "xxxxxxxx";
PWD.ToList().ForEach(passWord.AppendChar);
SharePointOnlineCredentials credentials = new SharePointOnlineCredentials(USER, passWord);
client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
client.Credentials = credentials;
client.Headers.Add(HttpRequestHeader.ContentType, "application/json;odata=verbose");
client.Headers.Add(HttpRequestHeader.Accept, "application/json;odata=verbose");
client.BaseAddress = "https://companyname.sharepoint.com/sites/Test";
// Get Digest
string digestUrl = "/_api/contextinfo";
string digestResult = client.UploadString(digestUrl, "POST");
JToken dr = JToken.Parse(digestResult);
string digest = dr["d"]["GetContextWebInformation"]["FormDigestValue"].ToString();
// So far so good! FormDigest is returned here so I know I have correct credentials
// Add Digest to next request
client.BaseAddress = "https://companyname.sharepoint.com";
client.Headers.Add("X-RequestDigest", digest);
client.Headers.Add("X-HTTP-Method", "POST");
string endpointUri = "/sites/Test/_api/Web/GetFolderByServerRelativePath(decodedurl='/sites/Test/Syra_Test')/Folders";
string payloadString = "{'__metadata': {'type':'SP.Folder'},'ServerRelativeUrl': '/syraHest'}";
// Fails here 403!!
string result = client.UploadString(endpointUri, "POST", payloadString);
//string result = client.DownloadString(endpointUri);
JToken t = JToken.Parse(result);
Console.WriteLine(t);
GET folders and the like works fine, so what am i missing in my POST requests ?
Edited code same result unfortunately.:
SharePointOnlineCredentials credentials = new SharePointOnlineCredentials(USER, passWord);
client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
client.Credentials = credentials;
client.Headers.Add(HttpRequestHeader.ContentType, "application/json;odata=verbose");
client.Headers.Add(HttpRequestHeader.Accept, "application/json;odata=verbose");
client.BaseAddress = "https://companyname.sharepoint.com";
// Get Digest
string digestUrl = "/_api/contextinfo";
string digestResult = client.UploadString(digestUrl, "POST");
JToken dr = JToken.Parse(digestResult);
string digest = dr["d"]["GetContextWebInformation"]["FormDigestValue"].ToString();
// So far so good! FormDigest is returned here so I know I have correct credentials
// Add Digest to next request
client.Headers.Add("X-RequestDigest", digest);
client.Headers.Add("X-HTTP-Method", "POST");
string endpointUri = "/sites/Test/_api/Web/folders";
string payloadString = "{'__metadata': {'type':'SP.Folder'},'ServerRelativeUrl': '/sites/Test/Syra_Test/syraHest'}";
// Fails here!!
string result = client.UploadString(endpointUri, "POST", payloadString);
JToken t = JToken.Parse(result);
Console.WriteLine(t);
Edit.: same error but new message.: 403 Access denied. You do not have permission to perform this action or access this resource
request.:
POST https://companyname.sharepoint.com/sites/Test/_api/Web/folders HTTP/1.1
X-RequestDigest: xxxxxxxx,29 Apr 2021 12:16:23 -0000
Accept: application/json;odata=verbose
Content-Type: application/json;odata=verbose
Host: companyname.sharepoint.com
Content-Length: 90
Expect: 100-continue
Connection: Keep-Alive
{'__metadata': {'type':'SP.Folder'},'ServerRelativeUrl': '/sites/Test/Syra_Test/syraHest'}