【问题标题】:Update multiple choice field in sharepoint using rest api使用rest api更新sharepoint中的多项选择字段
【发布时间】:2018-01-19 18:28:13
【问题描述】:

我正在尝试使用 rest api 在线更新 sharepoint 中的多项选择字段。我收到 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();

有什么帮助吗?

【问题讨论】:

    标签: c# sharepoint sharepoint-api


    【解决方案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
    

    其次,更新操作需要在请求中指定以下属性:

    • 使用 POST 动词创建 HTTP 请求。
    • 添加一个值为 MERGE 的 X-HTTP-Method 标头。
    • 添加带有实体原始 ETag 值的 If-Match 标头。

    您可以参考this post 了解更多详情。

    最后但同样重要的是,需要指定 Content-TypeAccept 请求标头(请关注 this article 了解更多详细信息),例如:

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

    【讨论】:

      猜你喜欢
      • 2012-08-18
      • 1970-01-01
      • 2011-07-19
      • 2019-06-06
      • 1970-01-01
      • 2020-01-24
      • 2017-04-18
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多