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

我尝试过的:-

图片:-

在意识到我的失败请求的输出 cURL 脚本确实有效后,我找到了解决方案。

问题出在我的 headers - auto-generated headers 中的默认 Content-Type 设置为:-

multipart/form-data; boundary=<calculated when request is sent>

我没有选中它,并添加了我自己的:-

multipart/form-data

将其保留为默认设置解决了我的问题。