如何使用Microsoft Graph API的.NET SDK创建带描述的PlannerTask
使用Microsoft Graph .NET SDK创建带描述的PlannerTask
兄弟,我之前刚踩过这个坑!确实用Microsoft Graph .NET SDK创建带描述的PlannerTask没法一步到位,因为描述存在关联的PlannerTaskDetails对象里,而这个对象在任务创建阶段是只读状态,必须分两次调用处理,而且更新Details的时候还得用上ETag,不然肯定会触发乐观并发的报错。
下面是具体的实现步骤和代码示例,亲测可用:
步骤1:创建基础的PlannerTask
首先先创建一个不带描述的任务,拿到任务的ID:
var plannerTask = new PlannerTask { Title = "完成项目文档整理", BucketId = "你的BucketID", PlanId = "你的PlanID" }; var createdTask = await graphClient.Planner.Tasks .Request() .AddAsync(plannerTask);
步骤2:获取任务关联的PlannerTaskDetails
刚创建的任务会自动生成对应的TaskDetails对象,我们需要先获取它,拿到关键的ETag值(这是后续更新的必填项):
var taskDetails = await graphClient.Planner.Tasks[createdTask.Id].Details .Request() .GetAsync();
步骤3:更新PlannerTaskDetails添加描述
用PATCH方法更新Details,记得在请求头里带上刚才拿到的ETag,确保更新的是最新版本的Details:
var updatedDetails = new PlannerTaskDetails { Description = "需要整理项目的需求文档、API文档和部署手册,完成后同步到SharePoint文档库" }; await graphClient.Planner.Tasks[createdTask.Id].Details .Request() .Header("If-Match", taskDetails.GetEtag()) .PatchAsync(updatedDetails);
额外注意点
- 为什么必须用ETag?Planner采用乐观并发控制,ETag用来验证你要更新的对象是最新状态,避免多人同时更新导致数据冲突
- 能不能一步完成?目前Graph API暂时不支持创建任务时同时写入TaskDetails,所以必须分步骤执行
- 想减少网络请求?可以用Graph的批量请求(Batch Request)把这几个操作打包发送,不过逻辑上还是分三步处理,只是合并了网络请求
内容的提问来源于stack exchange,提问作者user310988
相关产品推荐
相关产品推荐

