Как исправить '422 Unprocessable Entity' при отправке запроса POST в Redmine API? - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь создать вики-страницу, используя redmine rest api. Аутентификация прошла успешно, однако вики-страница не создается из-за ошибки 422.

Документация Redmine гласит: «При попытке создать или обновить объект с недопустимыми или отсутствующими параметрами атрибута вы получите ответ 422. Необработанный объект. Это означает, что объект не может быть создан или обновлен».

Но я могу выяснить, где я запутался. ПРОБЛЕМА ПРИНЯЛАСЬ, КОГДА Я СДЕЛАЛ ВТОРОЙ ЗАПРОС - «ЗАДАТЬ ЗАПРОС».

поэтому мы знаем, что проблема где-то в этом разделе.

Полагаю, это либо путь к файлу, либо тип содержимого.

Это то, что я имею до сих пор ....

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----->  ");
        })

}


Я предполагаю, что на моей панели инструментов redmine создается страница вики, но я получаю ошибку 422.

1 Ответ

0 голосов
/ 24 июня 2019

Вы отправляете запрос на обновление в JSON API, т.е. <redmine_url>/projects/Testing/wiki/WikiTesting.json с Content-Type: application/octet-stream. Из-за этого Redmine не может проанализировать полезную нагрузку PUTed, поскольку не знает, в каком формате находятся данные.

Чтобы решить эту проблему, вы всегда должны указывать правильный тип контента при публикации данных. В этом случае вы должны установить заголовок Content-Type на application/json при отправке любых данных в формате JSON в Redmine.

Обратите внимание, что в принципе вы можете отправлять данные XML в Redmine и возвращать JSON. Выходной формат определяется файлом, оканчивающимся на URL (.json или .xml), формат отправляемых вами данных всегда определяется заголовком Content-Type.

...