Обновить поле множественного выбора в sharepoint с помощью rest api

Я пытаюсь обновить поле множественного выбора в sharepoint online с помощью rest api. Я получаю ошибку 401 неверный запрос.

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("XXXXX/_api/web/getfilebyserverrelativeurl('/sites/Sample/TestDoc.docx')/ListItemAllFields/");

string stringData = 
@"{'__metadata': { 'type':'SP.ListItem' }, 
'TestColumn': { '__metadata': { 'type' : 'Collection(Edm.String)', results: ['Test1']}}}";

request.ContentLength = stringData.Length;

StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(stringData);
writer.Flush();

 response = (HttpWebResponse)request.GetResponse();

Любая помощь?


person Jacob Santiago    schedule 29.12.2017    source источник


Ответы (1)


Скорее всего, полезная нагрузка в вашем примере недействительна:

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