以静默方式更新PlannerTaskDetails失败

时间:2018-02-19 12:36:32

标签: c# microsoft-graph

我使用Microsoft Graph .Net SDK与Planner进行交互。 我刚刚创建了PlannerTask,我想设置Description属性。

我的方法包含在:How can I create a planner task with a description?

这里是获取返回的PlannerTaskDetails对象的代码,修改了描述,然后更新它:

var taskDetails = taskDetailsResult.Result; // Get Previous Task Details
taskDetails.Description = description;

task.Details = await graphServiceClient
    .Planner
    .Tasks[task.Id]
    .Details
    .Request()
    .Header("If-Match", taskDetails.GetEtag())
    .UpdateAsync(taskDetails);

UpdateAsync返回,但返回null。 没有例外,null显然不包含更多信息,并且描述不会更改。

我使用Fiddler来监控来回的HTTP流量。我可以看到PATCH请求正在发送到Graph API,并且设置了If-Match标头。

奇怪的是,请求正文中的JSON对象列出了两次description属性!第一次使用我的值,第二次使用null。

我假设反序列化器正在获取它为属性看到的最后一个值,这就是为什么它没有更新。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您已正确更改代码以使用修补程序对象,而不是重用现有的PlannerTaskDetail。要获取更新的对象(如果支持),您需要设置prefer头。

http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part1-protocol/odata-v4.0-errata03-os-part1-protocol-complete.html#_Toc453752234,第8.2.8.7节

.Header("prefer", "return=representation")

答案 1 :(得分:1)

我想知道是否尝试重新使用检索到的PlannerTaskDetails对象导致我在“描述”属性中看到的“设置两次”行为。

我调整了我的代码来创建一个新的PlannerTaskDetails对象,同时仍然使用来自检索到的PlannerTaskDetails对象的电子标签,这次JSON主体中的唯一属性是单个实例具有我所需值的Description属性。

var previousTaskDetails = taskDetailsResult.Result; // Get Previous Task Details
var newTaskDetails = new PlannerTaskDetails();
newTaskDetails.Description = description;

task.Details = await graphServiceClient
    .Planner
    .Tasks[task.Id]
    .Details
    .Request()
    .Header("If-Match", previousTaskDetails.GetEtag())
    .UpdateAsync(newTaskDetails);

UpdateAsync仍然返回一个null对象,所以如果我想返回最新的PlannerTaskDetails对象以及PlannerTask对象,那么API调用的数字现在最多为4:

  • 创建任务。
  • 检索TaskDetails。
  • 更新TaskDetails。
  • 检索TaskDetails。