0

我正在对共享点站点进行一些基本的 Rest/http 调用以上传文档。请参阅下面的代码。

这就像一个魅力,但它只创建具有给定名称和内容的文件。有没有办法通过 REST/http 接口来操作 sharepoint 中的元数据?

我还尝试使用 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.
4

1 回答 1

0

上传文件后,如果您搜索响应数据,您可以在 SharePoint 中找到包含分配给文件的 ID 的服务器回复。使用此 ID,我们可以进行第二次休息调用以更新该项目及其元数据。

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)
    {

    }
}

我在这里有更多使用 HttpClient 处理 SharePoint REST 的示例:

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

于 2015-04-08T15:43:58.283 回答