使用Microsoft Graph SDK创建SharePoint列表项返回500错误咨询
问题根因
你遇到的500错误是低版本Microsoft Graph C# SDK的布尔值序列化bug导致的:
- .NET原生的布尔值为
True/False(首字母大写),而JSON规范要求布尔值为小写的true/false - 3.x及更早版本的Graph C# SDK在序列化
FieldValueSet.AdditionalData中的布尔值时,不会自动转换为JSON标准的小写格式,会直接输出大写的True/False,SharePoint的Graph接口无法识别该格式,因此抛出通用异常。 - Postman发送的请求中布尔值为小写标准格式,因此可以正常执行。
解决方案
方案1(优先):升级SDK版本
将Microsoft Graph C# SDK升级到4.0及以上的最新稳定版,该版本已经修复了布尔值序列化的问题,原有代码不需要修改即可正常运行。
方案2(临时兼容低版本SDK)
对布尔类型的字段值用JsonElement包装,强制序列化输出小写布尔值:
await client .Sites[siteId] .Lists[listId] .Items .Request() .AddAsync(new ListItem { Fields = new FieldValueSet { AdditionalData = new Dictionary<string, object> { { "Title", "Test" }, { "Salary", System.Text.Json.JsonDocument.Parse("true").RootElement }, } } });
方案3(自定义请求)
直接构造原生HTTP请求发送,手动保证JSON格式正确:
var requestUrl = client.Sites[siteId].Lists[listId].Items.Request().RequestUrl; var requestBody = new { fields = new { Title = "Test", Salary = true } }; var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, requestUrl); httpRequestMessage.Content = new StringContent( System.Text.Json.JsonSerializer.Serialize(requestBody), System.Text.Encoding.UTF8, "application/json" ); await client.AuthenticationProvider.AuthenticateRequestAsync(httpRequestMessage); var response = await client.HttpProvider.SendAsync(httpRequestMessage);
内容的提问来源于stack exchange,提问作者FD Mason
相关产品推荐
相关产品推荐

