C#使用Rest API调用执行批量更新/插入SharePoint列表项的代码
我正试图通过循环项目ID在sharepoint列表中进行批量更新,如下代码所示。然而,它只是第一次成功更新。 第二次更新出现错误,因为“响应状态代码不表示成功:403” 我遵循了这个urlC#使用Rest API调用执行批量更新/插入SharePoint列表项的代码,c#,sharepoint,C#,Sharepoint,我正试图通过循环项目ID在sharepoint列表中进行批量更新,如下代码所示。然而,它只是第一次成功更新。 第二次更新出现错误,因为“响应状态代码不表示成功:403” 我遵循了这个url Uri=newuri(ConfigurationManager.AppSettings[“SiteUrl]”); 使用(var client=new SPHttpClient(uri、ConfigurationManager.AppSettings[“用户名”]、ConfigurationManager.A
Uri=newuri(ConfigurationManager.AppSettings[“SiteUrl]”);
使用(var client=new SPHttpClient(uri、ConfigurationManager.AppSettings[“用户名”]、ConfigurationManager.AppSettings[“密码”]))
{
var listTitle=“sp_样本”;
var itemId=1;
var itemPayload=new{{uuu metadata=new{type=“SP.Data.sampleListItem”},Title=“Phani”,Place=“hydrabad”};
对于(inti=1;iDid测试并找到由重复请求头引起的问题,请尝试下面的更新方法
public JObject ExecuteJson<T>(string requestUri, HttpMethod method, IDictionary<string, string> headers, T payload)
{
HttpResponseMessage response;
switch (method.Method)
{
case "POST":
var requestContent = new StringContent(JsonConvert.SerializeObject(payload));
requestContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;odata=verbose");
var Digest = RequestFormDigest();
DefaultRequestHeaders.Clear();
DefaultRequestHeaders.Add("X-RequestDigest", Digest);
if (headers != null)
{
foreach (var header in headers)
{
DefaultRequestHeaders.Add(header.Key, header.Value);
}
}
response = PostAsync(requestUri, requestContent).Result;
break;
case "GET":
response = GetAsync(requestUri).Result;
break;
default:
throw new NotSupportedException(string.Format("Method {0} is not supported", method.Method));
}
response.EnsureSuccessStatusCode();
var responseContent = response.Content.ReadAsStringAsync().Result;
return String.IsNullOrEmpty(responseContent) ? new JObject() : JObject.Parse(responseContent);
}
PublicJobject ExecuteJson(字符串请求URI、HttpMethod方法、IDictionary头、T负载)
{
HttpResponseMessage响应;
开关(方法,方法)
{
案例“职位”:
var requestContent=newstringcontent(JsonConvert.SerializeObject(payload));
requestContent.Headers.ContentType=MediaTypeHeaderValue.Parse(“应用程序/json;odata=verbose”);
var Digest=RequestFormDigest();
DefaultRequestHeaders.Clear();
添加(“X-RequestDigest”,摘要);
如果(标题!=null)
{
foreach(标头中的var标头)
{
DefaultRequestHeaders.Add(header.Key,header.Value);
}
}
response=PostAsync(requestUri,requestContent);
打破
案例“GET”:
response=GetAsync(requestUri).Result;
打破
违约:
抛出新的NotSupportedException(string.Format(“方法{0}不受支持”,Method.Method));
}
response.EnsureSuccessStatusCode();
var responseContent=response.Content.ReadAsStringAsync().Result;
返回字符串.IsNullOrEmpty(responseContent)?new JObject():JObject.Parse(responseContent);
}
403表示您的请求没有权限,您使用的是哪个版本?SharePoint内部/在线?身份验证将不同。@Lee_MSFT,是的,这也有点让人困惑。如果您看到,我在一开始就提到过,我可以处理单个项目,但如果我循环使用多个ID,则会抛出403错误。Pro宝贝,我不正确地循环它,或者我丢失了一些内置函数,可以帮助批量更新/插入。请建议。我理解,因为我们需要提前清除标题以获得新的标题。只是想知道,我们是否有一些函数或方法可以避免for循环来更新每个项目。是否有可能获得所有updjson格式的数据(我可以做到)在一个头请求中,所有数据都得到正确更新??
public JObject ExecuteJson<T>(string requestUri, HttpMethod method, IDictionary<string, string> headers, T payload)
{
HttpResponseMessage response;
switch (method.Method)
{
case "POST":
var requestContent = new StringContent(JsonConvert.SerializeObject(payload));
requestContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;odata=verbose");
var Digest = RequestFormDigest();
DefaultRequestHeaders.Clear();
DefaultRequestHeaders.Add("X-RequestDigest", Digest);
if (headers != null)
{
foreach (var header in headers)
{
DefaultRequestHeaders.Add(header.Key, header.Value);
}
}
response = PostAsync(requestUri, requestContent).Result;
break;
case "GET":
response = GetAsync(requestUri).Result;
break;
default:
throw new NotSupportedException(string.Format("Method {0} is not supported", method.Method));
}
response.EnsureSuccessStatusCode();
var responseContent = response.Content.ReadAsStringAsync().Result;
return String.IsNullOrEmpty(responseContent) ? new JObject() : JObject.Parse(responseContent);
}