当前位置: 首页 > 知识库问答 >
问题:

邮递员多部分POST到Rails

贺飞
2023-03-14

我试图从某个客户端向rails服务器发送POST请求,但遇到了一些问题。完整的要求是发送一个图像,用回形针处理,但它看起来像是一个带有Rails问题的普通邮递员多部分邮件。

class CategoriesController < ApplicationController

def create
  @category = Category.new(category_params)

  respond_to do |format|
    if @category.save
      format.html { redirect_to @category, notice: 'Category was successfully created.' }
      format.json { render :show, status: :created, location: @category }
    else
      format.html { render :new }
      format.json { render json: @category.errors, status: :unprocessable_entity }
    end
  end
end
  private

    def category_params
      params.require(:category).permit(:label, :description)
    end

我假设问题在于请求参数没有封装在“categories”中。请让我知道,如果我不够清楚,如果我可以提供更多的信息。

提前谢谢。

但我还是得到了同样的结果

    Processing by CategoriesController#create as JSON
  Parameters: {"------WebKitFormBoundaryFdJXZFMuAl0fZf3Q\r\nContent-Disposition: form-data; name"=>"\"category[label]\"\r\n\r\nTraffic\r\n------WebKitFormBoundaryFdJXZFMuAl0fZf3Q\r\nContent-Disposition: form-data; name=\"category[description]\"\r\n\r\nTraffic category\r\n------WebKitFormBoundaryFdJXZFMuAl0fZf3Q--\r\n"}
Completed 400 Bad Request in 1ms (ActiveRecord: 0.0ms)

ActionController::ParameterMissing (param is missing or the value is empty: category):
  app/controllers/categories_controller.rb:67:in `category_params'
  app/controllers/categories_controller.rb:27:in `create'

共有1个答案

凌恩
2023-03-14

Postman可以很好地处理Rails,您只需要了解Rails通常如何处理参数。

假设您将以下参数发布到服务器:

plain_param=value
nested_object[attribute]=value

这被解析成以下内容:

pry(main)> params = ActionController::Parameters.new(plain_param:"value", nested_object: { attribute: "value" } )
=> {"plain_param"=>"value", "nested_object"=>{"attribute"=>"value"}}

让我们来看看<代码>如何允许< /COD>工作。

params.permit(:plain_param)
pry(main)> params.permit(:plain_param)
Unpermitted parameter: nested_object
=> {"plain_param"=>"value"}

pry(main)> params.permit(:nested_object)
Unpermitted parameters: plain_param, nested_object
=> {}

pry(main)> params.permit(:nested_object => :attribute)
Unpermitted parameter: plain_param
=> {"nested_object"=>{"attribute"=>"value"}}

pry(main)> params.permit(:plain_param, :nested_object => :attribute )
=> {"plain_param"=>"value", "nested_object"=>{"attribute"=>"value"}}

到目前为止,一切顺利。看起来像是permit通过返回顶级和嵌套允许密钥的整个哈希,并打印未允许密钥的警报。要求怎么样?

[33] pry(main)> params
=> {"plain_param"=>"value", "nested_object"=>{"attribute"=>"value"}}

pry(main)> params.require(:plain_param)
=> "value"

pry(main)> params.require(:nested_object)
=> {"attribute"=>"value"}

pry(main)> params.require(:nested_object => :attribute)
ActionController::ParameterMissing: param is missing or the value is empty: {:nested_object=>:attribute}

pry(main)> params.require(:plain_param, :nested_object)
ArgumentError: wrong number of arguments (2 for 1)

我们可以看到,要求返回单个参数键的值。这有助于确保具有多个属性的对象的存在。

包装:

params.require(:category).permit(:label, :description)

需要窗体的散列

{:类别=

转换为的HTML POST参数

category[label]=value
category[description]=value

编辑:Postman自动设置多部分文件上载的内容类型标题,因此不要手动设置。不确定这是一个bug还是一个特性。

https://github.com/postmanlabs/postman-app-support/issues/191

 类似资料:
  • 如何使用POSTMAN对具有自定义头的多部分/表单数据进行测试,以2个文件为参数的控制器()?

  • 这是我尝试用以下代码发送到api文件夹中的pictures控制器的数据: 这将抛出一个数据库错误,该错误表示我违反了外键约束(我认为这是因为为空)。但是,我只想看看发布的数据的外观,但是当我尝试使用函数输出时,没有显示出来。我试图发布一个实际工作的JSON体。我的问题是如何获得通过表单数据发送的控制器中的数据。 编辑我确实输出了请求数据,但为true。当我尝试使用输出时,我会得到以下信息: 编辑2

  • 我想通过邮递员上传一个图像到我的Rest API。我使用的是Spring Boot框架。以下是屏幕截图: 我也没有设置任何头部,因为我在其他堆栈溢出答案中发现,它给出了多部分边界错误。 下面是我的控制器代码: 现在,我将使用一个产品对象,该对象内部包含一个定义为Byte[]数组的图像。我把它作为字符串和图像分开作为多部分文件。 下面是我定义的产品类属性: 因为,我使用的是spring boot,这

  • 我正在构建一个应用程序,需要一个API调用,在其POST body请求中有数组。我正在使用OkHttp 2.6请求API。 Postman中的请求如下所示: 为了实现这一点,我尝试了几种编写的方法,

  • 问题内容: 如何在多部分电子邮件中使用html标签。当我使用它时,不能将其识别为粗体标签。 问题答案: 嗯,您正在使用Java。 请注意,我认为您应该始终在HTML电子邮件中设置纯文本替代项。 此代码还允许您内嵌图像(通过HTML从引用,但并非所有电子邮件客户端都支持此功能。

  • 我创建了对在 AWS 服务器上运行的后端的邮递员 POST API 调用 我得到了适当的回应。我的测试人员(远程工作的人)做了同样的事情,得到了错误的API响应(不是我们所期望的)。 我试着在我们公司的另外4台电脑上做同样的测试用例,得到了同样的正确响应。我的测试人员的邮递员有什么问题?