【问题标题】:Rails controller accept json POST requestRails 控制器接受 json POST 请求
【发布时间】:2015-11-28 17:18:49
【问题描述】:

如何设置我的 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 }] }

编辑:我的问题是设计 gem 试图在之前的操作中对用户进行身份验证。

【问题讨论】:

  • 您可以删除:via => [:post]。除此之外,它看起来不错。什么不起作用?您是否尝试过在页面上打印参数?日志是什么样的?

标签: ruby-on-rails json ruby-on-rails-4


【解决方案1】:

如果您的请求的 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

【讨论】:

  • 感谢您指向文档链接,我不知道 rails 会自动将 JSON 解析为我已经习惯的相同参数。
【解决方案2】:

您可能需要在发出 post 请求之前设置正确的标头,以便 rails 控制器接受 json 响应。

Content-Type: application/json
Accept: application/json

此 SO 响应包含更多详细信息 https://stackoverflow.com/a/4914925

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多