Скорее всего, полезная нагрузка в вашем примере недействительна:
string stringData =
@"{'__metadata': { 'type':'SP.ListItem' },
'TestColumn': { '__metadata': { 'type' : 'Collection(Edm.String)', results: ['Test1']}}}";
Дело в том, что тип SP.ListItem
соответствует Generic
списку, в вашем примере это библиотека Documents.
Итак, необходимо указать допустимое имя типа объекта, вы можете использовать следующую конечную точку для определения metadata type
:
Конечная точка:
Url: /_api/lists/getbytitle('<list title>')?$select=ListItemEntityTypeFullName
Method: GET
Во-вторых, операция обновления требует, чтобы в запросе были указаны следующие свойства:
- Создайте HTTP-запрос с помощью глагола
POST
.
- Добавьте заголовок
X-HTTP-Method
со значением MERGE.
- Добавьте заголовок
If-Match
со значением исходного ETag объекта.
Вы можете сослаться на этот пост для получения более подробной информации.
И последнее, но не менее важное: необходимо указать заголовки запросов Content-Type
и Accept
(следуйте эту статью для получения более подробной информации), например:
request.Accept = "application/json;odata=verbose";
request.ContentType = "application/json;odata=verbose";
Следующий пример резюмирует это и демонстрирует, как обновить значение поля с множественным выбором:
var requestUrl = $"{webUrl}/_api/web/getfilebyserverrelativeurl('{fileUrl}')/ListItemAllFields";
var request = (HttpWebRequest)WebRequest.Create(requestUrl);
request.Credentials = GetCredentials(userName, password);
request.Accept = "application/json;odata=verbose";
request.ContentType = "application/json;odata=verbose";
request.Method = "POST";
request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
request.Headers.Add("X-RequestDigest", formDigestVal);
request.Headers.Add("X-HTTP-Method", "MERGE");
request.Headers.Add("If-Match", "*");
var payload = @"{
'__metadata': { 'type':'SP.Data.Shared_x0020_DocumentsItem' },
'<ColumnName>': { '__metadata': { 'type' : 'Collection(Edm.String)'}, results: ['Val1']}
}";
request.ContentLength = payload.Length;
var writer = new StreamWriter(request.GetRequestStream());
writer.Write(payload);
writer.Close();
var response = (HttpWebResponse)request.GetResponse();
person
Vadim Gremyachev
schedule
19.01.2018