[英]How to create a folder without an error using Microsoft Graph API?
我正在尝试使用 CakePHP 在我团队的 Sharepoint 文件夹中创建一个文件夹,但它显示错误。 我尝试了几种发布和调用 API 的方法,但一切都不起作用。 我的 API 是
https://graph.microsoft.com/v1.0/drives/{drive-id}/root:/{folder-name}:/children
我在下面构建了这个 function。
private function createNewFolder($folder_name)
{
try {
$http = new Client();
$accessToken = $this->getRequest()->getSession()->read('accessToken');
$data = [
"name" => $folder_name,
"folder" => "{ }",
"@microsoft.graph.conflictBehavior" => "rename"
];
$url = "https://graph.microsoft.com/v1.0/drives/{drive-id}/root:/{folder-name}:/children";
$headers = [
'headers' => ['Authorization' => 'Bearer '. $accessToken, 'Content-Type' => 'application/json']
];
return $http->post($url, json_encode($data), $headers)->getJson();
} catch
(\Exception $e) {
return $e->getMessage();
}
}
它说一个错误,
“有效负载中的属性文件夹的值与架构不匹配。”
虽然它使用 Postman 工作,但它在网站上不起作用。
我已经在 Active Directory 中允许了包括Files.ReadWrite, Files.ReadWrite.All, Sites.ReadWrite.All
在内的权限。
对于其他为此苦苦挣扎的人,解决方案非常简单,Graph API 不喜欢 PHP 编码 JSON 的默认方式:
$array = [
"name" => "FolderName",
"folder" => []
];
var_dump(json_encode($array));
请问output:
string(33) "{"name":"FolderName","folder":[]}"
这就是 SDK 的编程方式。 问题是 Graph API 不喜欢方括号用于空对象。 它需要大括号。 这可以在 PHP 中通过向 JSON 编码添加一个标志来实现:
$array = [
"name" => "FolderName",
"folder" => []
];
var_dump(json_encode($array, JSON_FORCE_OBJECT));
这将 output:
string(33) "{"name":"FolderName","folder":{}}"
这是 Graph API 想要的格式。 但是由于 JSON 编码是由没有标志的 SDK 自动完成的,我们必须通过自己编码数组来覆盖它:
$response = $graph->setApiVersion("v1.0")
->createRequest("POST", "/drives/me/items/root/children")
->addHeaders([
"Content-Type" => "application/json"
])
->attachBody(json_encode([
"name" => "FolderName",
"folder" => []
], JSON_FORCE_OBJECT))
->execute();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.