You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:42:01