我使用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。
我假设反序列化器正在获取它为属性看到的最后一个值,这就是为什么它没有更新。
我做错了什么?
答案 0 :(得分:2)
您已正确更改代码以使用修补程序对象,而不是重用现有的PlannerTaskDetail
。要获取更新的对象(如果支持),您需要设置prefer头。
.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: