Microsoft.Graph.GraphServiceClient规划器存储桶AddAsync返回错误“仅在包含的实体上支持写请求”

时间:2019-01-24 13:13:11

标签: c# office365 microsoft-graph

我有一些代码可以获取或创建Planner Bucket

public async Task<PlannerBucket> GetOrCreateBucket(GraphServiceClient graphServiceClient, string planId, string name)
{
    var buckets = await graphServiceClient
        .Planner
        .Plans[planId]
        .Buckets
        .Request()
        .GetAsync();

    var bucket = buckets.SingleOrDefault(b => b.Name.Equals(name));

    if (bucket == null)
    {
        bucket = await graphServiceClient
            .Planner
            .Plans[planId]
            .Buckets
            .Request()
            .AddAsync(new PlannerBucket()
            {
                Name = name
            });
    }

    return bucket;
}

此代码最初是一年前编写的,我相当确定它可以正常工作。

在早期经常有新的存储桶,并且创建的还可以。 从那时起,很少调用创建代码,而在最近调用它时,它会返回错误:

  

Microsoft.Graph.ServiceException:代码:BadRequest
  消息:仅在包含的实体上支持写请求

我不太确定该错误意味着什么。

要包含一个实体是什么意思?
为什么不包含它?
它甚至意味着哪个实体?
这是否意味着我要创建的存储桶?
这是否意味着我要在其中创建计划?

这些问题的答案将是不错的,因为它们可以帮助我了解如何解决该问题,但是最终,真正的问题是:“我做错了什么,我该如何纠正? ?”。

这是HTTP请求:

POST https://graph.microsoft.com/v1.0/planner/plans/__PLANID__/buckets HTTP/1.1
Cache-Control: no-store, no-cache
Connection: Keep-Alive
Content-Type: application/json
Authorization: Bearer __TOKEN__
SdkVersion: Graph-dotnet-1.7.0
x-ms-request-root-id: 309b7fa3-4c57a2db0536dddc
x-ms-request-id: |309b7fa3-4c57a2db0536dddc.2.
Request-Id: |309b7fa3-4c57a2db0536dddc.2.1.
Content-Length: 30
Host: graph.microsoft.com

{"name":"__BUCKETNAME__"}

这是回应:

HTTP/1.1 400 Bad Request
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: application/json
request-id: 5186e2aa-7a1c-4f86-88c4-5542ef89e6c9
client-request-id: 5186e2aa-7a1c-4f86-88c4-5542ef89e6c9
x-ms-ags-diagnostic: __DIAGNOSTICINFO__
Duration: 2.7551
Strict-Transport-Security: max-age=31536000
Date: Thu, 24 Jan 2019 13:08:52 GMT

fb
{
  "error": {
    "code": "BadRequest",
    "message": "Write requests are only supported on contained entities",
    "innerError": {
      "request-id": "5186e2aa-7a1c-4f86-88c4-5542ef89e6c9",
      "date": "2019-01-24T13:08:53"
    }
  }
}
0

经过一番搜索,我认为这个问题已经在github上报道了,但是目前仍未解决:https://github.com/microsoftgraph/msgraph-sdk-dotnet/issues/307

1 个答案:

答案 0 :(得分:1)

这里的错误消息不是很有帮助,但是问题是我们不允许POST进入计划者/计划/计划者/存储桶。您应该将请求发送到计划者/存储桶,并在请求正文中包含planid属性。文档中的示例是正确的(顺序提示是可选的):https://docs.microsoft.com/en-us/graph/api/planner-post-buckets?view=graph-rest-1.0