1

当我调用 Graph/assigments端点时,我收到带有以下消息的错误请求:

未找到段“分配”的资源。

相同的代码模式适用于其他端点,例如/teachersand /members,只是不适用/assignments

代码:

$getEventsUrlAssignments = '/education/classes/' . $class->getId() . '/assignments';
try {
    $assignments = $graph->createRequest('GET', $getEventsUrlAssignments)
        ->setReturnType(Model\EducationAssignment::class)
        ->execute();
} 
catch (\GuzzleHttp\Exception\ClientException $e) {
    dd($e->getResponse()->getBody()->getContents());
}

我添加了文档中描述的正确权限:

  • EduAssignments.ReadBasic
  • EduAssignments.ReadWriteBasic
  • EduAssignments.Read
  • EduAssignments.ReadWrite

我可能做错了什么?

4

1 回答 1

1

您收到此错误是因为 /assignments仅在 Graph 的 Beta 版本中可用。如果您尝试使用 v1.0 调用此端点,Graph 将拒绝请求并显示以下错误:

{
    "error": {
        "code": "BadRequest",
        "message": "Resource not found for the segment 'assignments'.",
        "innerError": {
            "request-id": "38df490c-3a2b-4fe8-a77e-a7cce82831b5",
            "date": "2020-02-20T18:46:16"
        }
    }
}

为了使用/assignments端点,您需要调用 Beta 版本:

/beta/education/assignments/

您可以使用以下命令告诉 SDK 使用 Beta 版本setApiVersion

$graph = new Graph();
$graph
  ->setBaseUrl("https://graph.microsoft.com/")
  ->setApiVersion("beta")
  ->setAccessToken($_SESSION['access_token']);

$getEventsUrlAssignments = '/education/classes/' . $class->getId() . '/assignments';
try {
    $assignments = $graph->createRequest('GET', $getEventsUrlAssignments)
        ->setReturnType(Model\EducationAssignment::class)
        ->execute();
} 
catch (\GuzzleHttp\Exception\ClientException $e) {
    dd($e->getResponse()->getBody()->getContents());
}

您还需要参考 Beta 模型,因为 v1.0 中没有分配模型。此过程在 SDK 的 Wiki 中的Using Beta Models中进行了描述。

于 2020-02-20T18:53:51.960 回答