如何通过.NET版Microsoft Graph API SDK更新托管元数据(分类术语)
适用于.NET的Microsoft Graph SDK 更新TermStore术语实现方法
更新托管元数据Term的核心逻辑是必须定位到单个Term实体资源发起PATCH请求,不支持对Term集合直接执行更新操作,具体实现步骤和代码如下:
核心注意事项
- 你当前的查询代码返回的是
myIdTerm节点下的所有子Term集合,无法直接对集合发起更新请求,必须先拿到要更新的目标Term的ID,定位到单个资源节点 - TermStore相关的实体类都位于
Microsoft.Graph.TermStore命名空间下,不要误用根命名空间下的同名类,否则会出现序列化错误 - 更新时仅需要传入你需要修改的属性即可,不需要携带全量Term字段
实现代码
1. 基础更新请求构造
// 定义要更新的Term属性 var termUpdateBody = new Microsoft.Graph.TermStore.Term { // 示例:更新术语的多语言显示标签 Labels = new List<Microsoft.Graph.TermStore.LocalizedLabel> { new Microsoft.Graph.TermStore.LocalizedLabel { Name = "更新后的术语名称", LanguageTag = "zh-CN", IsDefault = true }, new Microsoft.Graph.TermStore.LocalizedLabel { Name = "Updated Term Name", LanguageTag = "en-US", IsDefault = false } }, // 示例:更新术语描述 Descriptions = new List<Microsoft.Graph.TermStore.LocalizedDescription> { new Microsoft.Graph.TermStore.LocalizedDescription { Description = "更新后的术语说明文本", LanguageTag = "zh-CN" } } // 如需更新自定义属性,给Properties字段赋值即可,值类型需和TermStore中定义的属性类型匹配 }; // 发起更新请求 // 注意:如果更新的是根级Term,路径到.Terms[rootTermId]即可 // 如果更新的是子级Term,需要追加一层.Terms[childTermId] var updatedTerm = await graphClient .Sites[mySite] .TermStore .Groups[myGroup] .Sets[mySet] .Terms[targetRootTermId] // 子Term更新时取消注释下一行 // .Terms[targetChildTermId] .Request() .UpdateAsync(termUpdateBody);
2. 适配你现有查询代码的写法
你已经查询到了父Term下的子Term集合,可以先从集合中匹配到目标子Term,再取ID构造更新请求:
// 你原有查询子Term集合的代码 var childTerms = graphClient .Sites[mySite] .TermStore .Groups[myGroup] .Sets[mySet] .Terms[myIdTerm] .Terms .Request() .GetAsync() .Result; // 匹配到你要更新的目标子Term var targetChildTerm = childTerms.First(t => t.Id == myTargetChildTermId); // 构造子Term更新请求 var updatedResult = await graphClient .Sites[mySite] .TermStore .Groups[myGroup] .Sets[mySet] .Terms[myIdTerm] .Terms[targetChildTerm.Id] .Request() .UpdateAsync(termUpdateBody);
常见报错排查
- 返回404:检查Term路径层级是否正确,根Term和子Term的路径层级差一级,ID传错、层级缺失都会触发资源不存在错误
- 返回400:检查传入的更新字段格式是否正确,比如LocalizedLabel必须指定默认标签、语言标签符合格式要求
- 序列化错误:检查是否用错了Term实体类的命名空间,必须使用
Microsoft.Graph.TermStore.Term类型作为更新请求的body
内容的提问来源于stack exchange,提问作者Max Bertoli
相关产品推荐
相关产品推荐

