2012-06-17 2 views
0

Я делаю некоторые основные вызовы Rest/http на сайт sharepoint для загрузки документов. См. Код ниже.Sharepoint/Rest и metadata

Это работает как шарм, но только создает файл с указанным именем и контентом. Есть ли способ манипулировать метаданными в sharepoint через интерфейс REST/http?

Я также пробовал использовать протокол oData, который позволяет легко изменять метаданные, но это потребовало от меня добавления ссылки на службы и использования сгенерированных классов, очень приятных, но не требующих гибкости. Какие-либо предложения?

byte[] bytesToSend = // get bytes from a file somewhere 
WebRequest req = WebRequest.Create(new Uri("https://mysharepoint/sites/mysite/file.txt")); 
req.Method = "PUT"; 
req.Credentials = new NetworkCredential("USR","passwd","Domain"); 
MemoryStream ms = new MemoryStream(bytesToSend); 
ms.CopyTo(req.GetRequestStream()); 
HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
if (resp.StatusCode.Equals(HttpStatusCode.OK) || resp.StatusCode.Equals(HttpStatusCode.Created)) 
{  // ... Ok done uploading. 
+1

вы пробовали добавлять заголовки? – Paparazzi

+0

Ну, нет. Это, очевидно, путь. просто нужно найти имена заголовков и их синтаксис. –

+0

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.headers.aspx http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.contenttype. ASPX – Paparazzi

ответ

0

После того, как вы загрузили файл, если вы ищете данные ответа, вы можете найти ответ сервера, который содержит идентификатор, назначенный для файла в SharePoint. С помощью этого идентификатора мы можем сделать второй вызов отдыха, чтобы обновить этот элемент и его метаданные.

if (response.IsSuccessStatusCode) 
{ 
    var info = response.Content.ReadAsStringAsync(); 
    JsonObject d = JsonValue.Parse(info.Result).GetObject(); 
    string id = d["d"].GetObject()["ListItemAllFields"].GetObject().GetNamedValue("ID").Stringify(); 

    client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }); 
    client.BaseAddress = new System.Uri(url); 
    client.DefaultRequestHeaders.Clear(); 
    client.DefaultRequestHeaders.Add("X-RequestDigest", digest); 
    client.DefaultRequestHeaders.Add("X-HTTP-Method", "MERGE"); 
    client.DefaultRequestHeaders.Add("IF-MATCH", "*"); 
    HttpContent strContent = new StringContent(String.Concat("{ '__metadata': { 'type': 'SP.List' }, 'Title': '", filename, "' }")); 
    strContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
    strContent.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("odata", "verbose")); 
    HttpResponseMessage updateResponse = await client.PostAsync(String.Concat("_api/web/lists/GetByTitle('Project Photos')/Items(", id, ")"), strContent); 
    updateResponse.EnsureSuccessStatusCode(); 
    if (updateResponse.IsSuccessStatusCode) 
    { 

    } 
} 

У меня есть еще примеры здесь работы с SharePoint REST с помощью HttpClient:

https://arcandotnet.wordpress.com/2015/04/01/sharepoint-2013-rest-services-using-c-and-the-httpclient-for-windows-store-apps/