调用MS GraphServiceClient新增SharePoint事件列表项报无效参数错误
问题根因
触发无效参数错误的核心原因有两个:
- 你传入的日期字符串使用了长破折号(
–,Unicode 编码 U+2013)作为年月日连接符,不符合接口要求的半角短横(-,Unicode 编码 U+002D)规范,直接导致日期解析失败。 - SharePoint 事件列表的日期字段要求传入带时区标识的 ISO 8601 格式时间值,你当前传入的时间字符串没有时区信息,服务端无法判定时间所属时区,也会触发参数校验不通过。
- 额外注意:你当前使用的"Start Time"、"End Time"是列表字段的显示名,如果站点管理员修改过字段显示名,会导致字段匹配失败,更稳妥的方式是使用字段的固定内部名,事件列表默认的开始时间内部名为
EventDate,结束时间内部名为EndDate。
修复代码
将日期部分替换为标准格式即可,参考如下修正后的ListItem构造逻辑:
_scopes = new[] { "https://graph.microsoft.com/.default" }; // using Azure.Identity; var options = new TokenCredentialOptions { AuthorityHost = AzureAuthorityHosts.AzurePublicCloud }; var clientSecretCredential = new ClientSecretCredential( _graphSettings.TenantId, _graphSettings.ClientId, _graphSettings.ClientSecret, options); _graphClient = new GraphServiceClient(clientSecretCredential, _scopes); var listItem = new ListItem { Fields = new FieldValueSet { AdditionalData = new Dictionary<string, object>() { {"Title", "MS Graph API Test"}, {"Description", "Proof of Concept Test"}, {"Location", "East Club" }, // 替换为半角短横,末尾加Z表示UTC时间,若使用本地时间可替换为对应时区偏移,例如东八区写为2022-06-28T09:00:00+08:00 {"Start Time", "2022-06-28T09:00:00Z" }, {"End Time", "2022-06-28T15:00:00Z" } // 若使用内部字段名(不受显示名修改影响,稳定性更高)可替换为以下写法 // {"EventDate", "2022-06-28T09:00:00Z" }, // {"EndDate", "2022-06-28T15:00:00Z" } } } }; await _graphClient.Sites["{_graphSettings.SharepointSiteId}"].Lists["{_graphSettings.EventListId}"].Items .Request() .AddAsync(listItem);
排查技巧
如果修改后仍报错,可以先只传Title、时间字段这三个必填项,排除其他可选字段的格式干扰,逐个加回字段定位具体异常参数。
内容的提问来源于stack exchange,提问作者gotfocus
相关产品推荐
相关产品推荐

