【问题标题】:How to delete list item using SharePoint Online 2013 Rest API in C#如何在 C# 中使用 SharePoint Online 2013 Rest API 删除列表项
【发布时间】:2016-06-27 23:58:49
【问题描述】:

我正在尝试使用带有 C# 托管代码的 REST API 从 SharePoint 2013 Online 中删除列表项。

这是我的代码的精髓:

using (var client = new WebClient())
{
    client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
    client.Credentials = mySPCreds;

    client.Headers.Add(HttpRequestHeader.ContentType, "application/json;odata=verbose");
    client.Headers.Add(HttpRequestHeader.Accept, "application/json;odata=verbose");

    client.Headers.Add("X-HTTP-Method", "DELETE");
    client.Headers.Add("IF-MATCH", "*");

    var requestUri = new Uri("https://mysharepointsite.../_api/web/lists/getbytitle('MyList')/items(123)");

    client.UploadString(requestUri, String.Empty);
}

我收到 403 权限被拒绝,但使用类似的模式我可以创建一个列表项。我正在使用我的 WebClient 凭据,它是一个 SharePointOnlineCredentials 对象。我是 SharePoint 网站管理员。

所以,我想知道我是否只是语法/方法错误。假设我没有权限问题,有人可以验证我上面的代码“应该”工作吗?

【问题讨论】:

    标签: c# rest sharepoint-2013


    【解决方案1】:

    好的,我找到了解决方案:

    客户端标头需要包含表单摘要:

    client.Headers.Add("X-RequestDigest", GetFormDigest());
    

    要获取表单摘要,您可以使用以下代码:

        private string GetFormDigest()
        {
            var webClient = new WebClient();
            webClient.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
            webClient.Credentials = this.Credentials;
            webClient.Headers.Add(HttpRequestHeader.ContentType, String.Format("application/json;odata=nometadata"));
            webClient.Headers.Add(HttpRequestHeader.Accept, String.Format("application/json;odata=nometadata"));
    
            var uri = new Uri(this.SharepointBaseURL);
            var endpointUri = new Uri(uri, "_api/contextinfo");
            var result = webClient.UploadString(endpointUri, "POST");
            JToken t = JToken.Parse(result);
    
            //Use this if odata = nometadata
            return t["FormDigestValue"].ToString();
    
            //Use this if odata = verbose
            //return t["d"]["GetContextWebInformation"]["FormDigestValue"].ToString();
        }
    

    注意:凭证也很棘手,下面是代码:

            var securePassword = new SecureString();
            foreach (var c in myPassword)
            {
                securePassword.AppendChar(c);
            }
    
            this.Credentials = new SharePointOnlineCredentials(myUserName, securePassword);
    

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多