簡體   English   中英

SharePoint Rest Api-嘗試更新列表項時為403

[英]SharePoint Rest Api - 403 when trying to update list item

從C#庫中,我需要使用SP rest Api將文檔上載到文檔庫,然后為其設置屬性。

我幾乎可以通過按以下順序進行此工作:

  1. 發布到/ contextinfo以獲取FormDigestValue
  2. 將二進制文件包括標題屬性X-RequestDigest中的摘要發布到/ Files / Add
  3. 在標題屬性X-RequestDigest中獲取/ ListItemAllFields摘要

下一個調用是_api / web / lists / GetByTitle('library name')/ Items(157)的發布。

標題屬性X-RequestDigest中包含相同的摘要值,如下所示:

POST 

https://xxx.uk/_api/web/lists/GetByTitle('AssetMgmtEfilesDemo')/Items(157) HTTP/1.1
Accept: application/json, application/xml; odata=verbose
X-HTTP-Method: MERGE
IF-MATCH: *
X-RequestDigest: 0x01426A9818F7145E12BC2E99246C7E00AC1A3905D27204C783107FDDE806D2629171FAD8DCC61008E109DD9948BEB4208DC62107B2336B1228ABA143A2D5B3C6,19 Feb 2019 15:20:44 -0000
Content-Type: application/json; charset=utf-8
Host: xxx.uk
Content-Length: 359
Expect: 100-continue

{  
   __metadata":{
                    "type":"SP.Data.AssetMgmtEfilesDemoItem"
   },
   "UPRN":"U1",
   "KeystoneDocType":"Document"
}

我的問題是,對於此請求,我收到“ 403禁止”響應。

誰能看到我哪里出問題了?

在進行郵寄呼叫之前,您是否嘗試過獲取新的表單摘要值? 表單摘要值確實會在一段時間后過期(默認為30分鍾)。

您還可以在特定列表中檢查您的權限。

供參考的示例代碼,以C#代碼調用Rest API,參考System.Web.Extensions dll:

using System.Net;
using System.IO;
using System.Web.Script.Serialization;
static void Main(string[] args)
        {
            UpdateListItem();
        }
        public static string GetFormDigest()
        {
            string formDigest = null;

            string resourceUrl = "http://sp/sites/dev/_api/contextinfo";
            HttpWebRequest wreq = HttpWebRequest.Create(resourceUrl) as HttpWebRequest;
            wreq.UseDefaultCredentials = true;
            wreq.Method = "POST";
            wreq.Accept = "application/json;odata=verbose";
            wreq.ContentLength = 0;
            wreq.ContentType = "application/json";
            string result;
            WebResponse wresp = wreq.GetResponse();

            using (StreamReader sr = new StreamReader(wresp.GetResponseStream()))
            {
                result = sr.ReadToEnd();
            }

            var jss = new JavaScriptSerializer();
            var val = jss.Deserialize<Dictionary<string, object>>(result);
            var d = val["d"] as Dictionary<string, object>;
            var wi = d["GetContextWebInformation"] as Dictionary<string, object>;
            formDigest = wi["FormDigestValue"].ToString();

            return formDigest;

        }

        public static void UpdateListItem()
        {
            string result = string.Empty;
            Uri uri = new Uri("http://sp/sites/dev/_api/web/lists/getbytitle('AssetMgmtEfilesDemo')/items(1)");
            HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create(uri);
            wreq.Credentials = CredentialCache.DefaultNetworkCredentials;

            wreq.Method = "POST";
            wreq.Accept = "application/json; odata=verbose";
            wreq.ContentType = "application/json; odata=verbose";
            wreq.Headers.Add("X-HTTP-Method", "MERGE");
            wreq.Headers.Add("IF-MATCH", "*");
            wreq.Headers.Add("X-RequestDigest", GetFormDigest());

            string stringData = "{'__metadata': { 'type': 'SP.Data.AssetMgmtEfilesDemoItem' }, 'Title': 'UpdatedViaRest','UPRN':'U1','KeystoneDocType':'Image'}";
            wreq.ContentLength = stringData.Length;
            StreamWriter writer = new StreamWriter(wreq.GetRequestStream());
            writer.Write(stringData);
            writer.Flush();

            WebResponse wresp = wreq.GetResponse();
            using (StreamReader sr = new StreamReader(wresp.GetResponseStream()))
            {
                result = sr.ReadToEnd();
            }


        }

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM