如何设置我的rails项目以接受json HTTP POST请求?我是rails的初学者并尝试了不同的东西,但无法捕获任何数据。到目前为止,这是我的控制器方法。
def flowplayer_callback
pars = params[:video]
end
我在routes.rb文件中有这个:
post "flowplayer_callback" => "videos#flowplayer_callback", :via => [ :post]
传入的json看起来与此相似:
{"video": { "id": 85067, "seconds": 48, "failed": 0, "encodings": [{ "id": 263445, "duration": 23 }, { "id": 263446, "duration": 23 }] }
编辑:我的问题是设计宝石尝试在之前的操作中验证用户。
答案 0 :(得分:8)
如果请求的Content-Type
标头设置为application/json
,Rails会自动将参数加载到params哈希中。在这里阅读更多相关信息:
http://edgeguides.rubyonrails.org/action_controller_overview.html#json-parameters
此外,除非您已禁用它,否则您将使用强参数阻止任何您不允许的内容。
您应该允许您愿意接受控制器操作中的内容(或者如果您需要在多个位置允许它们,请设置私有方法,例如创建和更新方法):
def flowplayer_callback
pars = params.require(:video).permit(:id, :seconds, encodings: [:id, :duration])
end
我不确定你的:failed
部分数据是怎么回事,因为你的哈希值有点破碎。但是,你应该了解你需要做什么。
在此处详细了解强参数 - http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters
答案 1 :(得分:0)
可能需要在发出请求之前设置正确的标头,以便rails控制器接受json响应。
Content-Type: application/json
Accept: application/json
此SO响应包含更多详细信息https://stackoverflow.com/a/4914925