使用Microsoft Graph添加SharePoint列表项时遭遇400 Bad Request错误求助
从你提供的信息来看,有几个非常明显的问题可能导致了这个400错误,我来逐一拆解:
1. 字段名不匹配(最可能的直接原因)
你的POST请求里使用了AccountStatus字段,但从你获取的列表列信息中,根本不存在名为AccountStatus的列——对应的列实际名称是Status(displayName也是Status)。Graph API无法识别不存在的字段名,这直接会触发"Invalid Request"错误。
你需要把请求里的"AccountStatus": "Enabled"替换为"Status": "Enabled"。
2. 内置Title字段的隐含要求
虽然列信息里标记Title字段为非必填,但SharePoint列表的内置Title字段在Graph API的某些场景下,即使设置为非必填,也需要提供一个值才能成功创建列表项。建议你在请求的Fields里添加"Title": "Fictional User 1"(或者其他合适的值)试试。
3. 日期格式的严格性
你的日期字段使用的是纯日期字符串(比如"2019-03-12"),虽然Graph API有时候能兼容这种格式,但更稳妥的做法是使用ISO 8601标准格式,比如"2019-03-12T00:00:00Z",避免因日期解析失败导致的请求错误。
4. JSON格式的正确性
从Fiddler捕获的请求里看到JSON有\"转义符,这可能是构造请求时的手动转义错误。在PowerShell中,建议使用ConvertTo-Json自动生成正确的JSON结构,避免手动拼接带来的语法问题,示例如下:
$requestBody = @{ Fields = @{ Status = "Enabled" DisplayName = "Fictional User 1" UserId = "67853e89-65a9-431d-a3b1-1d60ab74dc1f" ADObjectGuid = "56752e89-65a9-431d-a3b1-1d61ab78dc1f" AccountCreated = "2019-03-12T00:00:00Z" AADObjectId = "8df5db8d-1d7a-4b35-b498-138eef2946fa" AccountType = "AD-Synced" ADLastLogonDate = "2020-08-25T00:00:00Z" Title = "Fictional User 1" } } | ConvertTo-Json -Depth 3
按照上面的步骤修正后,应该能解决这个400错误。如果还是有问题,可以尝试只提交最简化的字段(比如只包含Title和Status)来测试,逐步排查是否有其他字段的问题。
内容的提问来源于stack exchange,提问作者Jeremy Bradshaw

