无法使用 Invoke-RestMethod 更新工作项历史记录
Unable to update Work Item History using Invoke-RestMethod
我正在尝试从 PowerShell 向工作项历史记录添加一些信息。
例如发送json
[
{
"path": "/fields/System.History",
"op": "add",
"value": "Created by:\r\nRené Spišák\r\n\r\nTitle:\r\nPull request\r\n\r\nDescription:\r\nTest description"
}
]
到url
https://XXX.visualstudio.com/XXX/_apis/wit/workitems/14611?api-version=5.1
使用
Invoke-RestMethod $workItemUrl -ContentType "application/json-patch+json" -Method "PATCH" -Headers $headers -Body $jsonBody
以错误结束
Invoke-RestMethod : {"$id":"1","innerException":null,"message":"You must pass a valid patch document in the body of
the request.","typeName":"Microsoft.VisualStudio.Services.Common.VssPropertyValidationException,
Microsoft.VisualStudio.Services.Common","typeKey":"VssPropertyValidationException","errorCode":0,"eventId":3000}
At C:\agent\_work\_temp\afb9aee6-21d2-4ea1-b455-916baee6d74b.ps1:127 char:29
+ ... mResponse = Invoke-RestMethod $workItemUrl -ContentType "application/ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebExc
eption
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
使用 Postman
将相同的 json 发送到相同的 url 效果很好。
这个api有什么问题?什么是 "valid patch document"?
如何将格式化的(新行、html 等)文本发送到工作项 api?
https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/work%20items/update?view=azure-devops-rest-5.1
编辑:
只是为了澄清 - 问题仅出现在 json 的 value
字段中。脚本的其他部分工作正常。我可以 post 这个 JSON 到 WIT Api 使用 Postman
。所有作品。但是使用 Invoke-RestMethod
失败。
那么也许 PowerShell 以不同的方式处理发送 Json?退出aping?字符集?
已解决:
不正确ContentType
,必须是"application/json-patch+json; charset=utf-8"
powershell 似乎无法识别字符"René Spišák",试试其他字符。
我正在尝试从 PowerShell 向工作项历史记录添加一些信息。
例如发送json
[
{
"path": "/fields/System.History",
"op": "add",
"value": "Created by:\r\nRené Spišák\r\n\r\nTitle:\r\nPull request\r\n\r\nDescription:\r\nTest description"
}
]
到url
https://XXX.visualstudio.com/XXX/_apis/wit/workitems/14611?api-version=5.1
使用
Invoke-RestMethod $workItemUrl -ContentType "application/json-patch+json" -Method "PATCH" -Headers $headers -Body $jsonBody
以错误结束
Invoke-RestMethod : {"$id":"1","innerException":null,"message":"You must pass a valid patch document in the body of
the request.","typeName":"Microsoft.VisualStudio.Services.Common.VssPropertyValidationException,
Microsoft.VisualStudio.Services.Common","typeKey":"VssPropertyValidationException","errorCode":0,"eventId":3000}
At C:\agent\_work\_temp\afb9aee6-21d2-4ea1-b455-916baee6d74b.ps1:127 char:29
+ ... mResponse = Invoke-RestMethod $workItemUrl -ContentType "application/ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebExc
eption
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
使用 Postman
将相同的 json 发送到相同的 url 效果很好。
这个api有什么问题?什么是 "valid patch document"?
如何将格式化的(新行、html 等)文本发送到工作项 api?
https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/work%20items/update?view=azure-devops-rest-5.1
编辑:
只是为了澄清 - 问题仅出现在 json 的 value
字段中。脚本的其他部分工作正常。我可以 post 这个 JSON 到 WIT Api 使用 Postman
。所有作品。但是使用 Invoke-RestMethod
失败。
那么也许 PowerShell 以不同的方式处理发送 Json?退出aping?字符集?
已解决:
不正确ContentType
,必须是"application/json-patch+json; charset=utf-8"
powershell 似乎无法识别字符"René Spišák",试试其他字符。