2013-04-11 14 views
6

Tôi gặp sự cố khi đổi tên thư mục bên trong thư viện tài liệu bằng cách sử dụng REST api do SharePoint 2013 cung cấp. Đây là mã tôi đang sử dụng bên dưới.Không thể đổi tên thư mục trong SharePoint 2013 bằng cách sử dụng REST

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

Trong Fiddler đây là yêu cầu:

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

Và rồi câu trả lời:

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 

Tất cả mọi thứ có vẻ tốt cho đến khi tôi trở về SharePoint và thư mục thử nghiệm vẫn như cũ Tên. Tôi đang làm theo các hướng dẫn từ here và tôi đã thấy các ví dụ rất giống nhau khác. Tôi có thể đổi tên nó thông qua giao diện mà không có bất kỳ vấn đề gì.

Cảm ơn trước sự giúp đỡ nào!

+0

Sẽ là vấn đề về quyền. – Jordan

+1

@Jordan Tôi có thể xóa các thư mục mặc dù, tôi biết nó có thể nhưng tôi nghĩ rằng nếu nó là một vấn đề quyền tôi sẽ không thể xóa một trong hai. – TroyC

+0

Thêm một bình luận khác .. Tôi có thể đổi tên bằng các dịch vụ asmx SharePoint cũ, đó là những gì tôi đang làm bây giờ. Vui đủ đổi tên Danh sách hoạt động bằng phương pháp trên. – TroyC

Trả lời

0

Thử thêm danh sách vào tệp kê khai của bạn. Nó có vẻ giống như một vấn đề quyền truy cập, và khi bạn phải "tin tưởng" một ứng dụng sau đó chọn danh sách mà bạn muốn hoạt động với.

+1

Rất sai - điều này có thể được gọi ở bất kỳ phía nào, kể cả phía máy khách (ví dụ như trường hợp của tôi).Ngôn ngữ có thể là bất cứ điều gì và thậm chí bạn có thể không có 'biểu hiện'. Theo như các điều khoản có liên quan, tác giả đã xác nhận rằng anh ta có thể xóa các thư mục và giống nhau ở đây - tôi không thể đổi tên bằng cách sử dụng API này. – zaitsman

0

Ví dụ sau đây cho thấy làm thế nào để đổi tên thư mục thông qua dịch vụ REST SharePoint 2013

Kịch bản: đổi tên Archive thư mục để 2015 nằm ở Documents thư viện

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

nơi

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

Lưu ý:

  • SPHttpClient class - được thừa hưởng từ HttpClient và cung cấp một số functionaly cụ thể bổ sung SharePoint chẳng hạn như nhận yêu cầu tiêu hóa
  • SPHttpClientHandler class - giấu tất cả những phức tạp liên quan đến thẩm định SharePoint Online