Cannot rename a folder in SharePoint 2013 using REST

I am unable to rename the folder inside the document library using the REST api provided by SharePoint 2013. Here is the code I use below.

string digest = String.Empty; using (var response = await connector.HttpClient.PostAsync("_api/contextinfo", null, token)) { response.EnsureSuccessStatusCode(); var obj = await response.ReadObject("d"); digest = obj["GetContextWebInformation"].Value<string>("FormDigestValue"); } using (var request = new HttpRequestMessage(HttpMethod.Post, String.Format("/_api/Web/GetFolderByServerRelativeUrl('{0}')", operation.Path.FullName))) { request.Headers.Add("X-HTTP-Method", "MERGE"); request.Headers.Add("IF-MATCH", "*"); request.Headers.Add("X-RequestDigest", digest); //{ '__metadata': { 'type': 'SP.Folder' }, 'Name': 'New name' } dynamic obj = new JObject(); obj.__metadata = new JObject(); obj.__metadata.type = "SP.Folder"; obj.Name = operation.DesiredName; request.Content = new ODataJObjectContent(obj); using (var response = await connector.HttpClient.SendAsync(request, token)) { response.EnsureSuccessStatusCode(); await response.ReadText(); } } 

In Fiddler, here is the request:

 POST http://2013.blah.com/_api/Web/GetFolderByServerRelativeUrl('/Shared%20Documents/Test') HTTP/1.1 X-HTTP-Method: MERGE IF-MATCH: * X-RequestDigest: 0xA7C057B3AECE805B7313909570F64B8EACD7A677014B8EBE7F75CC5A7C081F87973D94E7CC22346964ECAB1FE3C6B326DA3B67DF7A646FE6F47E9B1E686C3985,11 Apr 2013 15:13:05 -0000 Accept: application/json; odata=verbose Content-Type: application/json; odata=verbose Host: 2013.skysync.com Content-Length: 50 Expect: 100-continue {"__metadata":{"type":"SP.Folder"},"Name":"Test2"} 

And then the answer:

 HTTP/1.1 204 No Content Cache-Control: private, max-age=0 Expires: Wed, 27 Mar 2013 15:13:15 GMT Last-Modified: Thu, 11 Apr 2013 15:13:15 GMT Server: Microsoft-IIS/8.0 X-SharePointHealthScore: 0 SPClientServiceRequestDuration: 15 X-AspNet-Version: 4.0.30319 SPRequestGuid: 53bd109c-43bb-2064-4a1b-82298b670ece request-id: 53bd109c-43bb-2064-4a1b-82298b670ece X-RequestDigest: 0x9CDB4F31CC5F3877C4383657C12BEC6CFF10FC28AB6A0BB2D9D38B4279187CBD1450359BDFF07F0E63FF550BFF96C46E0476FB895CDA104348AC066D86246BC6,11 Apr 2013 15:13:15 -0000 X-FRAME-OPTIONS: SAMEORIGIN X-Powered-By: ASP.NET MicrosoftSharePointTeamServices: 15.0.0.4420 X-Content-Type-Options: nosniff X-MS-InvokeApp: 1; RequireReadOnly Date: Thu, 11 Apr 2013 15:13:15 GMT 

Everything looks fine until I get back to SharePoint, and the test folder still matches the name. I follow the recommendations here , and I have seen other very similar examples. I can rename it through the interface without any problems.

Thanks in advance for your help!

+6
source share
2 answers

Try adding the list to the manifest file. This seems like a permission issue, and when you need to β€œtrust” the application, select the list that you want to work with.

0
source

The following example shows how to rename a folder through the SharePoint 2013 REST service

Scenario: rename the Archive folder to 2015 located in the Documents library

 using (var client = new SPHttpClient(webUri, userName, password)) { RenameFolder(client, webUri.ToString(),"Documents/Archive","2015"); } 

Where

  private static void RenameFolder(SPHttpClient client, string webUrl,string folderUrl,string folderName) { var folderItemUrl = webUrl + "/_api/web/GetFolderByServerRelativeUrl('" + folderUrl + "')/ListItemAllFields"; var data = client.ExecuteJson(folderItemUrl); var itemPayload = new { __metadata = new { type = data["d"]["__metadata"]["type"] }, Title = folderName, FileLeafRef = folderName, }; var itemUrl = data["d"]["__metadata"]["uri"]; var headers = new Dictionary<string, string>(); headers["IF-MATCH"] = "*"; headers["X-HTTP-Method"] = "MERGE"; client.ExecuteJson((string)itemUrl, HttpMethod.Post, headers, itemPayload); } 

Note:

  • class SPHttpClient - inherited from HttpClient and provides some additional SharePoint functionality, such as receiving a digest request
  • class SPHttpClientHandler - hides all the subtleties associated with SharePoint Online authentication
0
source

All Articles