向 Redmine API 发送 POST 请求时如何修复“422 Unprocessable Entity”?

Aar*_*ani 4 file-upload redmine redmine-api axios http-status-code-422

我正在尝试使用 redmine Rest api 创建一个 wiki 页面。身份验证已成功,但由于 422 错误,未创建 wiki 页面。

Redmine 文档说:“当尝试创建或更新属性参数无效或缺失的对象时,您将收到 422 Unprocessable Entity 响应。这意味着无法创建或更新该对象。”

但我似乎可以找出我哪里搞砸了。当我执行第二个请求“PUT REQUEST”时,问题出现了。

所以我们知道问题出在该部分的某个地方。

我的猜测是,它是文件路径或内容类型。

这就是我到目前为止所拥有的......

const wordDocument="C:\Users\adasani\Desktop\practice\RedmineApi/RedmineText.txt";

creatingWikiPage_Request(wordDocument);

function creatingWikiPage_Request(wordDocument) {

    axios({
        method: 'post',
        url: '<redmine_url>/uploads.json',
        headers: { 'Content-Type': 'application/octet-stream' },
        params: { 'key': '<api-key>' },
        data: wordDocument
    })
        .then(function (response) {
            console.log("succeeed--->  ");
            console.log(response.data.upload.token)
            axios({
                method: 'put',
                url: '<redmine_url>/projects/Testing/wiki/WikiTesting.json',
                headers: { 'Content-Type': 'application/octet-stream' },
                params: { 'key': '<api-key>' },
                data: {

                    "wiki_page": {
                        "text": "This is a wiki page with images, and other files.",
                        "uploads":[ 
                            { "token": response.data.upload.token, "filename": "RedmineText.txt", "content-type": "text/plain" }
                        ]
                    }

                }

            })
                .then(response => {
                    console.log("PUT is Succeed-->>>")
                    console.log(response)
                })
                .catch(error => {
                    console.log("Error-->>")
                    console.log(error.response)
                })

        })
        .catch(function (error) {
            console.log("failed----->  ");
            console.log(error.response.statusText, "-->", error.response.status);
            console.log(error.response.headers)
            console.log(error.message)
            console.log("failed----->  ");
        })

}


Run Code Online (Sandbox Code Playgroud)

我应该看到在我的 redmine 仪表板中创建了一个 wiki 页面,但我收到了 422 错误。

Hol*_*ust 8

您正在将更新请求发送到 JSON api,即<redmine_url>/projects/Testing/wiki/WikiTesting.json使用Content-Type: application/octet-stream. 因此,Redmine 无法解析 PUTed 有效负载,因为它不知道数据的格式。

为了解决这个问题,您应该始终确保在发布数据时设置正确的内容类型。在这种情况下,您应该在向 Redmine 发送任何 JSON 格式的数据时将Content-Type标头设置为。application/json

请注意,原则上,您可以将 XML 数据发送到 Redmine 并获取 JSON。输出格式由以 URL(.json.xml)结尾的文件决定,您发送的数据的格式始终由Content-Type标头标识。