调用MS Graph API更新PlannerTask的ConversationThreadId报错如何解决
问题原因
这个错误的本质是你直接提交了从GET接口获取的完整PlannerTask对象用于更新,对象中包含的assignedBy这类只读嵌套复杂属性在序列化后不符合Graph API的更新请求格式要求:API 预期更新请求中不要携带这类只读复杂字段,或者仅携带基础类型值,而你提交的完整对象会把assignedBy的整个对象结构都序列化上传,就触发了“预期基础值节点却遇到对象起始节点”的报错。
解决方案
推荐使用增量更新的方式,仅构造包含需要修改字段的PlannerTask对象提交,不要复用GET请求返回的全量对象:
// 取ETag还是可以用之前GET到的对象 var eTagId = plannerTask.GetEtag(); // 仅构造需要更新的字段,不要复用GET返回的全量对象 var updateTask = new PlannerTask { ConversationThreadId = "YYYYYYYY" }; await graphClient.Planner.Tasks[plannerTask.Id] .Request() .Header("Prefer", "return=representation") .Header("If-Match", eTagId) .UpdateAsync(updateTask);
如果你必须复用GET返回的对象,可以在提交前手动将assignedBy、assignments、createdBy、lastModifiedBy等所有只读复杂属性设置为null,避免多余字段被序列化提交,不过这种方式容易遗漏字段,更推荐增量更新的方案。
内容的提问来源于stack exchange,提问作者Carlos
相关产品推荐
相关产品推荐

