Rails API - POST 使用 multipart/form-data 格式的请求给出 ActionController::ParameterMissing
Rails API - POST request using multipart/form-data format gives ActionController::ParameterMissing
我可以 post 将原始 JSON 格式的以下正文添加到我的 API 中,没有任何问题:-
{
"job":{
"title": "Job 1",
"description": "Job 1",
"date": "2021-03-11T16:59:03.194Z",
"budget": "0.0",
"awarded": true,
"client_id": 1,
"location_id": 86,
"tag_ids":[25]
}
}
我现在想在 postman 中使用文件上传选项,因为我已经向该对象添加了图像。您只能在使用 multipart/form-data Content-Type 时通过 Postman 附加文件 - 但它不起作用并告诉我缺少“作业”参数..
我已经将散列的键设置为:-
job[title]
job[description]
job[date]
..等等
我最初将 Content-Type 留空,因此它默认为正确的 (multipart/form-data),它给出:-
"status": 400,
"error": "Bad Request",
"exception": "#<ActionController::ParameterMissing: param is missing or the value is empty: job\nDid you mean? controller
当我将 Content-Type 明确设置为 application/json 时,我得到:-
"status": 400,
"error": "Bad Request",
"exception": "#<ActionDispatch::Http::Parameters::ParseError: 783: unexpected token at '----------------------------632616788333464717206731\r\nContent-Disposition: form-data; name=\"job[title].......etc
我的控制器:-
def create
@job = Job.new(job_params)
if @job.save
render json: @job, status: :created
else
render json: @job.errors, status: :unprocessable_entity
end
end
def job_params
params.require(:job).permit(:title, :description, :date, :budget, :awarded, :client_id, :location_id, tag_ids: [])
end
我尝试过的:-
- 在没有前缀的情况下格式化表单数据键
job
- 没有帮助。
图片:-
在意识到我的失败请求的输出 cURL 脚本确实有效后,我找到了解决方案。
问题出在我的 headers - auto-generated headers 中的默认 Content-Type 设置为:-
multipart/form-data; boundary=<calculated when request is sent>
我没有选中它,并添加了我自己的:-
multipart/form-data
将其保留为默认设置解决了我的问题。
我可以 post 将原始 JSON 格式的以下正文添加到我的 API 中,没有任何问题:-
{
"job":{
"title": "Job 1",
"description": "Job 1",
"date": "2021-03-11T16:59:03.194Z",
"budget": "0.0",
"awarded": true,
"client_id": 1,
"location_id": 86,
"tag_ids":[25]
}
}
我现在想在 postman 中使用文件上传选项,因为我已经向该对象添加了图像。您只能在使用 multipart/form-data Content-Type 时通过 Postman 附加文件 - 但它不起作用并告诉我缺少“作业”参数..
我已经将散列的键设置为:-
job[title]
job[description]
job[date]
..等等
我最初将 Content-Type 留空,因此它默认为正确的 (multipart/form-data),它给出:-
"status": 400,
"error": "Bad Request",
"exception": "#<ActionController::ParameterMissing: param is missing or the value is empty: job\nDid you mean? controller
当我将 Content-Type 明确设置为 application/json 时,我得到:-
"status": 400,
"error": "Bad Request",
"exception": "#<ActionDispatch::Http::Parameters::ParseError: 783: unexpected token at '----------------------------632616788333464717206731\r\nContent-Disposition: form-data; name=\"job[title].......etc
我的控制器:-
def create
@job = Job.new(job_params)
if @job.save
render json: @job, status: :created
else
render json: @job.errors, status: :unprocessable_entity
end
end
def job_params
params.require(:job).permit(:title, :description, :date, :budget, :awarded, :client_id, :location_id, tag_ids: [])
end
我尝试过的:-
- 在没有前缀的情况下格式化表单数据键
job
- 没有帮助。
图片:-
在意识到我的失败请求的输出 cURL 脚本确实有效后,我找到了解决方案。
问题出在我的 headers - auto-generated headers 中的默认 Content-Type 设置为:-
multipart/form-data; boundary=<calculated when request is sent>
我没有选中它,并添加了我自己的:-
multipart/form-data
将其保留为默认设置解决了我的问题。