我正在尝试使用 REST API 设置 SharePoint 网站的欢迎页面。 这是我的代码:
def request_digest(self, site_url):
api_call = "/_api/contextinfo"
url = f"{site_url}{api_call}"
headers = {
"Authorization": f"Bearer {str(self.O365_TOKEN)}",
"Accept": "application/json;odata=verbose"
}
response = requests.post(url, headers=headers)
return data['d']['GetContextWebInformation']['FormDigestValue']
def set_homepage(self, site_url):
RequestDigest = self.request_digest(site_url)
api_call = "/_api/Web/RootFolder"
url = f"{site_url}{api_call}"
payload = {
"__metadata": {
"type": "SP.Folder"
},
"WelcomePage": "SitePages/Home.aspx"
}
headers = {
"X-HTTP-Method":"PATCH",
"Authorization": f"Bearer {str(self.O365_TOKEN)}",
"accept-language": "en-GB,en-US;q=0.9,en;q=0.8",
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
"content-length": str(len(json.dumps(payload).encode('utf-8'))),
"X-RequestDigest": RequestDigest,
"IF-MATCH": "*"
}
response = requests.post(url, headers=headers, json=payload)
这是回复:
{“错误”:{“代码”:“-1,Microsoft.SharePoint.Client.InvalidClientQueryException”,“消息”:“无效请求”}}
如有任何帮助,我们将不胜感激。
我已经尝试过:
搜索但每个来源(确实不多......)都说这应该有效。我什至尝试使用 Fiddler 检查标头和有效负载,但我发现的唯一区别是我使用 OAUTH 令牌而不是 x-requestdigest。
不带和带 X-RequestDigest 标头,因为不清楚在使用 OAUTH 令牌时是否必须包含它(https://learn.microsoft.com/en-us/sharepoint/dev/sp-add -ins/完整的基本操作使用-sharepoint-rest-endpoints#通过使用-the-rest-接口写入数据)
requests.patch 而不是 requests.post
其他 API 调用 GET 和 POST 工作正常,我能够创建新站点、获取其属性等...
谢谢, 本
您可以使用以下代码来设置WelcomePage
function SetDefaultPage() {
$.ajax
({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/rootfolder",
type: "POST",
data: JSON.stringify({
'__metadata': {
// Type that you are modifying.
'type': 'SP.Folder'
},
'WelcomePage': 'SitePages/home.aspx'
}),
headers:
{
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
"IF-MATCH": "*",
"X-HTTP-Method": "PATCH",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: function (data, status, xhr) {
console.log("Success");
},
error: function (xhr, status, error) {
console.log("Failed");
}
});
}