Rails HTTP - POST

mik*_*927 5 ruby post ruby-on-rails http request

我正在发送 HTTP POST 请求:

data = { id: 1, name: 'ABC' }

uri = URI.parse('http://localhost:3000/events')
http = Net::HTTP.new(uri.host, uri.port)
http.post(uri, data.to_json)
Run Code Online (Sandbox Code Playgroud)

我的路线文件:

Rails.application.routes.draw do
  post '/events' => 'receiver#create'
end
Run Code Online (Sandbox Code Playgroud)

而创建方法看起来像:

def create
 package = {
  id: ,
  name: 
 }
end
Run Code Online (Sandbox Code Playgroud)

如何访问通过请求传递的数据值?我的目标是将其分配给创建方法中的新哈希

Eug*_*Zol 3

您还应该在请求中设置 Content-Type 标头:

\n\n
http.post(uri, data.to_json, {"Content-Type" => "application/json", "Accept" => "application/json"})\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后您可以在控制器中使用params[:id]and 。params[:data]

\n\n
def create\n  @package = {id: params.require(:id), data: params.require(:data)}\n  head :no_content\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

head :no_content将呈现空回复(以便您可以稍后创建视图)。并将params.require确保提供您的参数(否则控制器将返回 400 Bad Request 响应)\xe2\x80\x93,这样您以后就不会收到一些奇怪的undefined method ... of nil错误,以防您在请求中遗漏了参数。

\n