问题描述
我一生都无法成功添加 SharePoint 列表项。我过去使用过,现在使用 Invoke-WebRequest 或 Invoke-RestMethod 很难过。我可以毫无问题地更新 (PATCH),并且可以对相同的站点、列表、项目等执行各种 GET 操作。
这是我的实际 HTTP POST 请求的提琴手捕获(Guid 捏造的):
POST https://graph.microsoft.com/v1.0/sites/2df3a5af-979d-46d6-b24d-14e4e4b58aa9/lists/2252b849-53f9-4816-bc0b-d9183357c702/items HTTP/1.1
Content-Type: application/json
Authorization: Bearer eyJ0f...
User-Agent: MSGraPHPSEssentials/0.4.0
Host: graph.microsoft.com
Content-Length: 537
{
"Fields": {
"AccountStatus": "Enabled","displayName": "Fictional User 1","UserId": "67853e89-65a9-431d-a3b1-1d60ab74dc1f","AdobjectGuid": "56752e89-65a9-431d-a3b1-1d61ab78dc1f","AccountCreated": "2019-03-12","AAdobjectId": "8df5db8d-1d7a-4b35-b498-138eef2946fa","AccountType": "AD-Synced","ADLastlogonDate": "2020-08-25"
}
}
对于显示的每个字段/列,SPO 列表上的内容类型是“单行文本”或“日期和时间”,在任何一种情况下,都不需要数据。列表中没有其他列是必需的(在我对此进行故障排除时是故意的)。
任何人都可以发现任何明显会导致我收到 400 Bad Request 并且提供的唯一附加信息是“无效请求”的内容
这是一个示例响应的提琴手捕获:
HTTP/1.1 400 Bad Request
Date: Thu,29 Apr 2021 14:26:08 GMT
Content-Type: application/json
Cache-Control: no-cache
transfer-encoding: chunked
Strict-Transport-Security: max-age=31536000
request-id: 87190763-4bfe-4a88-a69e-154fd60aad81
client-request-id: 87190763-4bfe-4a88-a69e-154fd60aad81
x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"East US","Slice":"E","Ring":"5","ScaleUnit":"004","RoleInstance":"BL02EPF000035AB"}}
da
{"error":{"code":"invalidRequest","message":"Invalid request","innerError":{"date":"2021-04-29T14:26:08","request-id":"87190763-4bfe-4a88-a69e-154fd60aad81","client-request-id":"87190763-4bfe-4a88-a69e-154fd60aad81"}}}
0
最后,这里是成功的 MS Graph 请求返回到 /sites/<ID>/lists/<ID>?Expand=Columns
的列:
>$columns.columns |select Name,displayName,ReadOnly,required
name displayName readOnly required
---- ----------- -------- --------
ManagerdisplayName ManagerdisplayName False False
ManagerEmail ManagerEmail False False
Ignore Ignore False False
UserId UserId False False
Title Title False False
ComplianceAssetId Compliance Asset Id True False
IgnoreReason IgnoreReason False False
AdobjectGuid AdobjectGuid False False
AAdobjectId AAdobjectId False False
ADLastlogonDate ADLastlogonDate False False
AADLastSignIn AADLastSignIn False False
disabledDate disabledDate False False
ReEnabledDate ReEnabledDate False False
JobTitle JobTitle False False
Status Status False False
ResolvedReason ResolvedReason False False
NewAADLastSignIn NewAADLastSignIn False False
AssignedLicenses AssignedLicenses False False
AADCreationType AADCreationType False False
AccountCreated AccountCreated False False
displayName displayName False False
Email Email False False
AccountType AccountType False False
NewADLastlogonDate NewADLastlogonDate False False
ID ID True False
ContentType Content Type False False
Modified Modified True False
Created Created True False
Author Created By True False
Editor Modified By True False
_UIVersionString Version True False
Attachments Attachments False False
Edit Edit True False
LinkTitleNoMenu Title True False
LinkTitle Title True False
DocIcon Type True False
ItemChildCount Item Child Count True False
FolderChildCount Folder Child Count True False
_ComplianceFlags Label setting True False
_ComplianceTag Retention label True False
_ComplianceTagWrittenTime Retention label Applied True False
_ComplianceTagUserId Label applied by True False
_IsRecord Item is a Record True False
AppAuthor App Created By True False
AppEditor App Modified By True False
我的问题是 100% 只有添加新项目。我希望返回的错误响应中有更多有用的信息。请注意,如果我尝试通过 $batch 端点执行此操作,则会得到相同的行为。这是可用的错误信息:
>$test.responses.body.Error
code message innerError
---- ------- ----------
invalidRequest Invalid request @{date=2021-04-29T14:41:34; request-id=cdf96c25-41e1-437b-9698-64389a2dc36b; client-request-id=cdf96c25-41e1-437b-9698-64389a2dc36b}
...再次只是“无效请求”:(.
解决方法
可耻的是,这个问题只是我身体中“Fields”中的大写“F”。它区分大小写(显然)。 “领域”解决了它。我打算删除这个问题,但如果它可能对某人有帮助,我会离开它。