【问题标题】:Params variable not getting filled with JSON post data....Why?参数变量没有被 JSON 发布数据填充......为什么?
【发布时间】:2012-07-14 23:12:59
【问题描述】:

我之前在其他一些领域也有过这项服务,但现在我似乎无法让它发挥作用,也不太明白为什么。

我将以下 json 发布到我的 Rails 应用程序(使用 RestClient 2.4,用于测试):

{
    "camp":{
        "total": 100,
        "number": "epw1f6e"
    },
    "machine":{
        "serial_number": "1234567",
        "token": "fONxDN"
    }
}

营地管理员:

def create
    if is_it_json?
      logger.debug params.inspect
      machine = Machine.find_by_serial_number(params[:machine][:serial_number])
...

从记录器中,我知道参数是:{"action"=>"create", "controller"=>"camp"}

json信息在哪里??

我的日志错误:

Started POST "/camps" for 127.0.0.1 at 2012-07-15 00:08:21 +0100
Processing by CampsController#create as JSON
WARNING: Can't verify CSRF token authenticity
{"action"=>"create", "controller"=>"camps"}
Completed 500 Internal Server Error in 2ms

NoMethodError (undefined method `[]' for nil:NilClass):
  app/controllers/camps_controller.rb:24:in `create'

我可能做错了什么?

谢谢

【问题讨论】:

    标签: ruby-on-rails json rest params


    【解决方案1】:

    经过大量阅读和提问,我才找到了解决方案:

    参数没有被填满,因为我缺少标题(我有接受,但缺少内容类型):

    Accept: application/json
    Content-type: application/json
    

    添加标题解决了这个问题。

    【讨论】:

      【解决方案2】:

      无法验证 CSRF 令牌的真实性 {"action"=>"create", "controller"=>"camps"}
      在 2ms 内完成 500 内部服务器错误

      当您的 json 发布无效(或不存在)的 CSRF 令牌时,将引发该错误。 CSRF 需要附加到任何已发布数据的标头。为了进行测试,您可以通过将以下内容添加到控制器(对于 Rails 3)来禁用 CSRF 令牌:

      protect_from_forgery :except => :create

      当网站投入生产时,请勿将其留在您的控制器中。 CSRF 令牌可防止 CSRF 攻击。详情请参阅Ruby on Rails Security Guide

      让我知道这是否有效!

      【讨论】:

      • 嗨,它刚刚删除了 CSRF 警告,但我仍然收到未定义的方法 [] 消息...为什么我的 params 变量填充了“动作”和“控制器”属性而不是“阵营” " 和 "machine" 来自我的 json 请求?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      相关资源
      最近更新 更多