[英]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.