向 Redmine API 发送 POST 请求时如何修复“422 无法处理的实体”?
How to Fix '422 Unprocessable Entity' when sending a POST request to Redmine API?
我正在尝试使用 redmine rest 创建一个 wiki 页面 api。
身份验证成功,但由于 422 错误而未创建 wiki 页面。
Redmine 文档说:"When trying to create or update an object with invalid or missing attribute parameters, you will get a 422 Unprocessable Entity response. That means that the object could not be created or updated."
但我似乎可以找出我哪里搞砸了。当我发出第二个请求时出现了问题 - "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-----> ");
})
}
我想在我的 redmine 仪表板中看到正在创建的 wiki 页面,但我收到 422 错误。
您正在向 JSON api 发送更新请求,即 <redmine_url>/projects/Testing/wiki/WikiTesting.json
和 Content-Type: application/octet-stream
。因此,Redmine 无法解析 PUTed 负载,因为它不知道数据的格式。
要解决这个问题,您应该始终确保在发布数据时设置正确的内容类型。在这种情况下,当向 Redmine 发送任何 JSON-formatted 数据时,您应该将 Content-Type
header 设置为 application/json
。
请注意,原则上,您可以向 Redmine 发送 XML 数据并返回 JSON。输出格式由URL(.json
或.xml
)结尾的文件决定,您发送的数据格式始终由Content-Type
header.
我在从 flutter 应用程序将多个文件上传到服务器时遇到了类似的问题;问题是某些服务器需要具有 [] 格式才能接收多个文件;
=> Change From
formData.files.add(MapEntry(
"videos",
await MultipartFile.fromFile(curPost.url, filename: getFileNameByFullPath(curPost.url)),
));
=> TO
formData.files.add(MapEntry(
"videos[]",
await MultipartFile.fromFile(curPost.url, filename: getFileNameByFullPath(curPost.url)),
));
这里我只是将 videos 更改为 videos[].
我正在尝试使用 redmine rest 创建一个 wiki 页面 api。 身份验证成功,但由于 422 错误而未创建 wiki 页面。
Redmine 文档说:"When trying to create or update an object with invalid or missing attribute parameters, you will get a 422 Unprocessable Entity response. That means that the object could not be created or updated."
但我似乎可以找出我哪里搞砸了。当我发出第二个请求时出现了问题 - "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-----> ");
})
}
我想在我的 redmine 仪表板中看到正在创建的 wiki 页面,但我收到 422 错误。
您正在向 JSON api 发送更新请求,即 <redmine_url>/projects/Testing/wiki/WikiTesting.json
和 Content-Type: application/octet-stream
。因此,Redmine 无法解析 PUTed 负载,因为它不知道数据的格式。
要解决这个问题,您应该始终确保在发布数据时设置正确的内容类型。在这种情况下,当向 Redmine 发送任何 JSON-formatted 数据时,您应该将 Content-Type
header 设置为 application/json
。
请注意,原则上,您可以向 Redmine 发送 XML 数据并返回 JSON。输出格式由URL(.json
或.xml
)结尾的文件决定,您发送的数据格式始终由Content-Type
header.
我在从 flutter 应用程序将多个文件上传到服务器时遇到了类似的问题;问题是某些服务器需要具有 [] 格式才能接收多个文件;
=> Change From
formData.files.add(MapEntry(
"videos",
await MultipartFile.fromFile(curPost.url, filename: getFileNameByFullPath(curPost.url)),
));
=> TO
formData.files.add(MapEntry(
"videos[]",
await MultipartFile.fromFile(curPost.url, filename: getFileNameByFullPath(curPost.url)),
));
这里我只是将 videos 更改为 videos[].