0

I would like to share some bit of experience and troubles that I met while doing a folder creation and moving by using RESTful API.

Joe Fu
  • 1

1 Answers1

0

**Create a Folder: **

  • You will need sharePoint Token
        public async Task<JObject> getSharePointToken()
        {
            var sharPointTokenRequestUrl = "https://accounts.accesscontrol.windows.net/" + _configuration["MicrosoftGraph: TenantId"] + "/tokens/OAuth/2";
            var parameters = new Dictionary<string, string>();
            parameters["grant_type"] = "client_credentials";
            parameters["client_id"] = "your client id";
            parameters["client_secret"] = "your client secret";
            parameters["resource"] = "resource id";
            var par = new FormUrlEncodedContent(parameters);
            using (var httpClient = new HttpClient())
            {
                using (var request = new HttpRequestMessage(new HttpMethod("POST"), sharPointTokenRequestUrl))
                {
                    var response = await httpClient.PostAsync(sharPointTokenRequestUrl, par);
                    string responseBody = await response.Content.ReadAsStringAsync();
                    var result = JObject.Parse(responseBody);
                    return result;
                }
            }

        }
  • Also You will need XRequest Digest
        public async Task<JObject> getXRequestDigest()
        {

            var sharPointXRequestDigesttUrl = "https://your site /_api/contextinfo";

            var sharePointTokenString = getSharePointToken().Result.ToString();
            var sharePointToken = JsonConvert.DeserializeObject<SharePointTokenDto>(sharePointTokenString);

            var parameters = new Dictionary<string, string>();
            var par = new FormUrlEncodedContent(parameters);
            using (var httpClient = new HttpClient())
            {

                httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + sharePointToken.access_token);
                httpClient.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
                using (var request = new HttpRequestMessage(new HttpMethod("POST"), sharPointXRequestDigesttUrl))
                {
                    var response = await httpClient.PostAsync(sharPointXRequestDigesttUrl, par);
                    string responseBody = await response.Content.ReadAsStringAsync();
                    var result = JObject.Parse(responseBody);
                    return result;
                }
            }
        }
  • Then you could Crate Folder In SharePoint
        
namespace Sharepoint.Dtos
{
    public class SharePointTokenDto
    {
        public string token_type { get; set; }
        public string expires_in { get; set; }
        public string not_before { get; set; }
        public string expires_on { get; set; }
        public string resource { get; set; }
        public string access_token { get; set; }
    }
}

public async Task<Boolean> CrateFolderInSharePoint(string folderPath)
        {

            var sharePointTokenString = getSharePointToken().Result.ToString();
            var sharePointToken = JsonConvert.DeserializeObject<SharePointTokenDto>(sharePointTokenString);
            var xRequestDigest = await getXRequestDigest();
            var FormDigestValue = xRequestDigest["d"]["GetContextWebInformation"]["FormDigestValue"];

            var siteUrl = "https://yoursites-url/sites/SiteName/_api/web/folders";
            var folderUrl = "/sites/SiteName/Shared Documents" + folderPath;

            var body = new Dictionary<string, string>
            {
                { "ServerRelativeUrl", folderUrl }
            };

            string bodyString = JsonConvert.SerializeObject(body);
            bodyString.Insert(0, " \"__metadata\": { \"type\": \"SP.Folder\" } ");

            var content = new StringContent(bodyString, Encoding.UTF8, "application/json");
            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + sharePointToken.access_token);
                httpClient.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
                httpClient.DefaultRequestHeaders.Add("X-RequestDigest", FormDigestValue.ToString());

                using (var request = new HttpRequestMessage(new HttpMethod("POST"), siteUrl))
                {
                    var response = await httpClient.PostAsync(siteUrl, content);
                    string responseBody = await response.Content.ReadAsStringAsync();
                    var result = JObject.Parse(responseBody);


                    if (response.IsSuccessStatusCode)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }

                }

            }
        }
Joe Fu
  • 1
  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Feb 08 '23 at 01:43