簡體   English   中英

如何使用 Microsoft Graph API 創建一個沒有錯誤的文件夾?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM