Jira API POST 和 Invoke-RestMethod

Jira API POST and Invoke-RestMethod

使用 Jira API 2 和 PowerShell 5 Invoke-RestMethod 我可以成功执行 GET,但是在尝试 POST 方法创建问题时我一直收到 (400) Bad Request我的项目。

$user    = [System.Text.Encoding]::UTF8.GetBytes("me:mypassword")
$headers = @{Authorization = "Basic " + [System.Convert]::ToBase64String($user)}
$data    = Get-Content D:\scripts\powershell\issue.txt 

Invoke-RestMethod -Uri "https://agile.mycompany.com/rest/api/2/issue/" -Method POST -Headers $headers -ContentType "application/json" -Body $data

$data 变量格式正确 JSON 对于 Jira:

{ 
    "fields":
    {
        "project":{"Key": "ITS"},
        "summary":"Rest Test 1",
        "issuetype":{"name": "Task"},
        "assignee":{"key": "myusername"},
        "priority":{"id": "3"},
        "description":
            "||Host Name||IP Address||Comments|| 
             |some-pc|192.168.1.1| |",
        "duedate": "2016-09-11"
    }
}

我是项目所有者,所以这不是权限问题。

Get-content 很棘手,因为它实际上会生成一个字符串数组,文本文件中的每一行都是该数组中的一个 object。解决这个问题的最佳方法可能是改用 .Net 的文件读取方法:

$data = [System.IO.File]::ReadAllText("D:\scripts\powershell\issue.txt")

顺便说一句,您可以使用常规 ps 凭据 object 而不是手动构建您的请求 header.

附带说明一下,使用 postman 等工具测试您的 api 始终是个好主意。这将让您验证您发布的内容是否有效 json 而不必担心您的代码会做奇怪的事情。

问题已解决。问题是我是 CAPITALIZING 字段名称的第一个字母。显然,Jira 对 CASE 非常敏感。 Trondh - 感谢您推荐使用 postman。邮递员从失败的 API 调用中生成的错误非常简洁。