使用REST API插入含人员选择器字段的SharePoint列表项报错求助
嘿,这个问题我之前帮不少开发者搞定过,你遇到的错误本质是人员选择器字段(ShareTicketWith)属于导航属性,它不接受单纯的原始值(比如直接传用户名、ID字符串),而是要求特定的数组包裹对象格式——哪怕只选一个用户也得用数组,因为这类字段天生支持多选,SharePoint API期望接收的是对象数组、空对象或者空值。
正确的请求格式(以REST API为例)
不管你用的是REST API、Power Automate还是其他开发工具,核心是给ShareTicketWith传对格式:
1. 单个用户的情况
{ "TicketID": "TKT-001", "EmpID": "EMP-123", "ShareTicketWith": [ { "LookupId": 123 // 优先用SharePoint内部的用户ID,最稳定 // 也可以用Email:"Email": "user@yourdomain.com" // 或者LoginName:"LoginName": "i:0#.f|membership|user@yourdomain.com" } ] }
2. 多个用户的情况
{ "TicketID": "TKT-002", "EmpID": "EMP-456", "ShareTicketWith": [ { "LookupId": 123 }, { "Email": "colleague@yourdomain.com" } ] }
必须注意的几个坑
- 一定要用数组
[]包裹用户对象:哪怕只选一个用户也不能省略数组,这是触发你那个错误的最常见原因! - 优先用
LookupId:用户的邮箱、用户名可能变更,但SharePoint内部的用户ID是固定的,用它更可靠。 - 如果不需要设置这个字段,直接省略它:就像你之前成功的情况那样,不要传
null或者空数组(除非你明确要清空该字段)。
哪些格式会触发错误?(避坑指南)
下面几种错误格式都会导致你遇到的PrimitiveValue错误,一定要避开:
- 直接传字符串:
"ShareTicketWith": "user@yourdomain.com" - 传单个对象而非数组:
"ShareTicketWith": {"Email": "user@yourdomain.com"} - 传原始数值:
"ShareTicketWith": 123
如果是用Power Automate这类低代码工具,操作逻辑也是一样的——要把人员选择器的值配置成包含用户对象的数组,而不是直接输入用户信息。
内容的提问来源于stack exchange,提问作者Surendra Mourya
相关产品推荐
相关产品推荐

