C# 以静默方式更新PlannerTaskDetails失败
我正在使用Microsoft Graph.Net SDK与Planner进行交互。 我刚刚创建了一个C# 以静默方式更新PlannerTaskDetails失败,c#,microsoft-graph-api,C#,Microsoft Graph Api,我正在使用Microsoft Graph.Net SDK与Planner进行交互。 我刚刚创建了一个计划任务,我想设置Description属性 我的方法包括: 以下代码获取返回的PlannerTaskDetails对象,修改描述,然后更新它: var taskDetails = taskDetailsResult.Result; // Get Previous Task Details taskDetails.Description = description; task.Details =
计划任务
,我想设置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。
没有例外,空值显然不包含进一步的信息,并且描述没有更改
我使用Fiddler来监视来回的HTTP流量。我可以看到一个补丁
请求被发送到Graph API,它设置了If Match
头
奇怪的是,请求主体中的JSON对象有两次列出的description属性!第一次使用我的值,第二次使用null
我假设反序列化程序正在获取它看到的属性的最后一个值,这就是它不更新的原因
我做错了什么?我想知道尝试重新使用检索到的
PlannerTaskDetails
对象是否导致了我在Description属性中看到的“设置两次”行为
我调整了代码,创建了一个新的PlannerTaskDetails
对象,同时仍然使用从检索到的PlannerTaskDetails
对象中的e-tag,而这一次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
仍然返回一个空对象,因此如果我想返回最新的PlannerTaskDetails
对象以及PlannerTask
对象,API调用的次数现在最多为4次:
- 创建任务
- 检索任务详细信息
- 更新任务详细信息
- 检索任务详细信息
PlannerTaskDetails
对象是否导致了我在Description属性中看到的“设置两次”行为
我调整了代码,创建了一个新的PlannerTaskDetails
对象,同时仍然使用从检索到的PlannerTaskDetails
对象中的e-tag,而这一次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
仍然返回一个空对象,因此如果我想返回最新的PlannerTaskDetails
对象以及PlannerTask
对象,API调用的次数现在最多为4次:
- 创建任务
- 检索任务详细信息
- 更新任务详细信息
- 检索任务详细信息
PlannerTaskDetail
。要获取更新的对象(如果支持),需要设置Preference标头
,第8.2.8.7节
.Header(“preference”,“return=representation”)
您正确地将代码更改为使用修补程序对象,而不是重用现有的PlannerTaskDetail
。要获取更新的对象(如果支持),需要设置Preference标头
,第8.2.8.7节
.Header(“首选”、“返回=表示”)
Planner支持首选标头。此方法将返回任务详细信息的最新数据(包括您请求的更改)。Planner支持首选标头。此方法将返回任务详细信息的最新数据(包括您请求的更改)。