2013-04-11 13 views
6

SharePoint 2013で提供されているREST APIを使用して、ドキュメントライブラリ内のフォルダの名前を変更する際に問題があります。フィドラーでRESTを使用してSharePoint 2013のフォルダの名前を変更できません

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(); 
    } 
} 

ここに要求される:

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"} 

そして応答:私は戻ってSharePointのに行くと、Testフォルダがまだ同じになるまで

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 

すべてがよさそうです名。私はhereのガイドラインに従っていますが、私は他の非常によく似た例を見てきました。私は何の問題もなくインターフェイスを介して名前を変更することができます。

ありがとうございました!

+0

権限の問題になります。 – Jordan

+1

@Jordanフォルダを削除することはできますが、それは可能ですが、権限の問題であれば削除することはできません。 – TroyC

+0

もう1つのコメントを追加しています。以前のSharePoint asmxサービスを使用して名前を変更できます。これは私が今やっていることです。面白い十分なリストの名前を変更する上記の方法を使用して動作します。 – TroyC

答えて

0

マニフェストファイルにリストを追加してみます。権限の問題のように思えます。アプリケーションを「信頼する」必要がある場合は、操作するリストを選択してください。

+1

非常に間違っています - これは、クライアント側を含むどの側でも呼び出すことができます(私の場合など)。言語は何でもよいし、あなたは「マニフェスト」さえ持っていないかもしれない。限り、アクセス許可に関係して、作者は、彼がここでフォルダを削除することができます確認 - 私はちょうどこのAPIを使用して名前を変更することはできません。 – zaitsman

0

次の例では、SharePoint 2013 RESTサービス

シナリオを経由して、フォルダの名前を変更する方法を示しています。Documents ライブラリ

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

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); 
    } 
に位置 2015Archiveフォルダの名前を変更します

注:

  • SPHttpClient classからHttpClientから継承し、そのような 要求が
  • SPHttpClientHandler classダイジェスト取得など、いくつかの追加のSharePoint固有のfunctionalyを提供 - SharePoint Onlineの認証に関連するすべての複雑さを隠し
関連する問題