通过REST在列表中插入项目

用户名

我正在创建WCF服务,在其中我要在共享点列表中执行CRUD操作。我已经通过REST成功从共享点列表中检索了数据,即通过网络凭据对象传递了凭据(用户名,密码,域),但不幸的是无法插入数据。错误是指在共享点中插入数据时未经授权的访问。然后,我尝试了Sharepoint在线凭据对象,但是没有运气。我需要一些帮助。

这是例外:

The remote server returned an error: (401) Unauthorized.

这是代码:

try
{
                        string userPassword = "password";
                        WebClient webClient = new WebClient();
                        SecureString securePassword = new SecureString();
                        for (int i = 0; i < userPassword.Length; i++)
                        {
                            securePassword.AppendChar(userPassword[i]);
                        }
                        webClient.Credentials = new SharePointOnlineCredentials(@"username@domain", securePassword);
                        webClient.Headers.Add("Content-type", "application/json");
                        webClient.Headers.Add("Accept", "application/json;odata=verbose");
                        webClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36");

                        webClient.Encoding = Encoding.UTF8;
                        string msg = webClient.UploadString("http://abc:9211/sites/api/_api/web/lists/getbytitle('list_name')/Items", "POST", "{__metadata\":{\"type\":\"SP.Data.SubscriptionListItem\"},\"UserID\":\"user\",\"SubscriptionType\":\"Type1\",\"Title\":\"Testing\"}");
}
catch(WebException ex)
{
}
瓦迪姆·格雷米亚切夫(Vadim Gremyachev)

发生此错误的原因是,在执行Request DigestSharePoint Online / Office 365请求期间必须指定执行创建,更新或删除操作的值。

关于 Request Digest

X-RequestDigest 标头存储安全验证令牌,该令牌可帮助防止攻击类型,从而使用户被诱骗而将数据发布到服务器而不知道。

如何在SharePoint 2013 / SharePoint Online中通过WebClient创建列表项

using System;
using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace SPORestClient
{
    /// <summary>
    /// Client for performing CRUD operations against List resource in SharePoint Online (SPO) 
    /// </summary>
    public class ListsClient : IDisposable
    {
        public ListsClient(Uri webUri, ICredentials credentials)
        {
            _client = new WebClient();
            _client.Credentials = credentials;
            _client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
            _client.Headers.Add(HttpRequestHeader.ContentType, "application/json;odata=verbose");
            _client.Headers.Add(HttpRequestHeader.Accept, "application/json;odata=verbose");
            WebUri = webUri;
        }

        public void InsertListItem(string listTitle, object payload)
        {
            var formDigestValue = RequestFormDigest();
            _client.Headers.Add("X-RequestDigest", formDigestValue);
            var endpointUri = new Uri(WebUri, string.Format("/_api/web/lists/getbytitle('{0}')/items", listTitle));
            var payloadString = JsonConvert.SerializeObject(payload);
            _client.Headers.Add(HttpRequestHeader.ContentType, "application/json;odata=verbose");
            _client.UploadString(endpointUri, "POST", payloadString);
        }

        /// <summary>
        /// Request Form Digest
        /// </summary>
        /// <returns></returns>
        private string RequestFormDigest()
        {
            var endpointUri = new Uri(WebUri, "_api/contextinfo");
            var result = _client.UploadString(endpointUri, "POST");
            JToken t = JToken.Parse(result);
            return t["d"]["GetContextWebInformation"]["FormDigestValue"].ToString();
        }


        public Uri WebUri { get; private set; }

        public void Dispose()
        {
            _client.Dispose();
            GC.SuppressFinalize(this);
        }

        private readonly WebClient _client;

    }
}

要点:[ListsClient.cs] [2]

注意:由于SharePoint要求用户在每个创建,更新和删除操作中都包含一个请求摘要值,因此将调用另一个请求,以使用RequestFormDigest method包含请求摘要值的Context Info实体进行请求。

-

依赖性:[Json.NET库] [1]

用法

下面的示例演示如何在Contacts列表中创建列表项

using (var client = new ListsClient(webUri, credentials))
{
    var contactEntry = new
    {
        __metadata = new { type = "SP.Data.ContactsListItem" },
        Title = "John Doe"
    };
    client.InsertListItem("Contacts", contactEntry);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将项目插入列表中的列表

来自分类Dev

将列表插入另一个列表,不带括号,并通过替换该索引中的当前项目

来自分类Dev

通过JSP表单插入新项目后更新列表

来自分类Dev

仅当不存在记录时,才通过存储过程从TVP列表中插入项目-性能降低

来自分类Dev

通过特定索引从列表中删除项目

来自分类Dev

通过startswith获取列表中的项目

来自分类Dev

通过特定索引从列表中删除项目

来自分类Dev

通过匹配R中的名称在矩阵中插入向量列表

来自分类Dev

无法在链接列表中插入项目,头始终为NULL

来自分类Dev

如何从文本框中插入项目符号列表?

来自分类Dev

如何使用 JSOM 在 SharePoint 列表中插入 5000 多个项目?

来自分类Dev

如何在 mongodb 文档中插入项目列表?

来自分类Dev

通过jQuery在UL中插入列表项

来自分类Dev

在Python中通过列表迭代插入表值

来自分类Dev

从REST API中获取列表数据后,希望从项目数组中删除列表项目

来自分类Dev

将列表插入集合后,集合仅包含列表中的项目,但不包含列表

来自分类Dev

通过比较其他列表中的项目从列表中删除项目

来自分类Dev

反向项目获取器(项目确定器?):将项目列表插入较大列表中的特定位置

来自分类Dev

使用JavaScript和REST从SharePoint列表中删除项目

来自分类Dev

如何实现REST API列表中的选定项目?

来自分类Dev

通过Ajax在模型中动态添加项目列表

来自分类Dev

列表中是否有通过引用比较的项目?

来自分类Dev

Rails-通过引导模态从列表中编辑项目

来自分类Dev

通过从列表中删除项目来发布

来自分类Dev

根据指定值通过“ =”字符获取列表中的项目

来自分类Dev

通过索引为数组列表中的项目分配值

来自分类Dev

通过聚合属性快速找到列表(T)中的项目

来自分类Dev

如何通过parentId从列表中删除所有项目

来自分类Dev

通过从列表中删除项目来发布

Related 相关文章

  1. 1

    将项目插入列表中的列表

  2. 2

    将列表插入另一个列表,不带括号,并通过替换该索引中的当前项目

  3. 3

    通过JSP表单插入新项目后更新列表

  4. 4

    仅当不存在记录时,才通过存储过程从TVP列表中插入项目-性能降低

  5. 5

    通过特定索引从列表中删除项目

  6. 6

    通过startswith获取列表中的项目

  7. 7

    通过特定索引从列表中删除项目

  8. 8

    通过匹配R中的名称在矩阵中插入向量列表

  9. 9

    无法在链接列表中插入项目,头始终为NULL

  10. 10

    如何从文本框中插入项目符号列表?

  11. 11

    如何使用 JSOM 在 SharePoint 列表中插入 5000 多个项目?

  12. 12

    如何在 mongodb 文档中插入项目列表?

  13. 13

    通过jQuery在UL中插入列表项

  14. 14

    在Python中通过列表迭代插入表值

  15. 15

    从REST API中获取列表数据后,希望从项目数组中删除列表项目

  16. 16

    将列表插入集合后,集合仅包含列表中的项目,但不包含列表

  17. 17

    通过比较其他列表中的项目从列表中删除项目

  18. 18

    反向项目获取器(项目确定器?):将项目列表插入较大列表中的特定位置

  19. 19

    使用JavaScript和REST从SharePoint列表中删除项目

  20. 20

    如何实现REST API列表中的选定项目?

  21. 21

    通过Ajax在模型中动态添加项目列表

  22. 22

    列表中是否有通过引用比较的项目?

  23. 23

    Rails-通过引导模态从列表中编辑项目

  24. 24

    通过从列表中删除项目来发布

  25. 25

    根据指定值通过“ =”字符获取列表中的项目

  26. 26

    通过索引为数组列表中的项目分配值

  27. 27

    通过聚合属性快速找到列表(T)中的项目

  28. 28

    如何通过parentId从列表中删除所有项目

  29. 29

    通过从列表中删除项目来发布

热门标签

归档