Sharepoint REST API在相同的有效访问令牌上返回HTTP状态代码200和401

时间:2018-08-09 09:00:27

标签: c# azure sharepoint-rest-api

我有一个由Sharepoint(在线)Webhook触发的azure函数,该函数-每个引用实现-调用Sharepoint REST API以使用存储的ChangeToken来获取相关的更改。

Sharepoint资源已通过X509证书进行身份验证

订阅位于给定Sharepoint网站的默认文档库上。在测试设置中,只需一次操作即可将大量文件添加到文档库中

http请求遵循以下格式: string requestUrl = String.Format("{0}/_api/lists('{1}')/getchanges", siteUrl, listId);

对API的查询遵循以下格式:

string query = "{'query': {'Activity':false,'Add':true,'Alert':false,'ChangeTokenStart':{ 'StringValue':'$ChangeTokenStart'},'ChangeTokenEnd':null,'ContentType':false,'DeleteObject':true,'Field':false,'File':true,'Folder':true,'Group':false,'GroupMembershipAdd':false,'GroupMembershipDelete':false,'Item':true,'LatestFirst':false,'List':true,'Move':true,'Navigation':false,'RecursiveAll':false,'Rename':true,'RequireSecurityTrim':false,'Restore':true,'RoleAssignmentAdd':false,'RoleAssignmentDelete':false,'RoleDefinitionAdd':false,'RoleDefinitionDelete':false,'RoleDefinitionUpdate':false,'SecurityPolicy':false,'Site':true,'SystemUpdate':false,'Update':true,'User':false,'View':false,'Web':false}}";
    //$changeTokenStart gets replaced in the actual call

请求的构建如下:

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, new Uri(requestUrl));
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer",accessToken);
request.Content = new StringContent(query,Encoding.UTF8,"application/json");

观察:

  1. 尽管Sharepoint Webhooks上有官方文档,但Webhooks并不是每分钟左右触发一次,但它们 可以很频繁地触发。这意味着获取Webhook订阅 的更改可能导致对Sharepoint REST API的频繁调用。我的感觉是,Sharepoint后端正在根据列表中“活动”的数量来积极管理此频率。

  2. 对Sharepoint REST API的调用都使用相同的有效且正确获取的访问令牌,它们的调用大多返回HTTP状态码200(确定),但也经常返回HTTP状态码401(未授权)。那怎么可能?

  3. 在实施退避算法(只要REST API调用的状态代码不为200时运行),则返回“请求消息已发送。无法多次发送相同的请求消息。”当对Sharepoint API发出相同的http请求时。为什么?

有人排队如何解决这些问题?

0 个答案:

没有答案