Params变量没有填充JSON帖子数据....为什么?

时间:2012-07-14 23:12:59

标签: ruby-on-rails json rest params

我之前使用过这个服务,还有其他一些领域,但是现在我似乎没有让它运转起来,并且我不太明白为什么。

我将以下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'

我可能做错了什么?

谢谢

2 个答案:

答案 0 :(得分:6)

经过大量的阅读和质疑,我发现了解决方案:

params没有被填满,因为我失去了Headers(我接受了,但是缺少了Content-type):

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

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

答案 1 :(得分:0)

  

无法验证CSRF令牌真实性{"操作" =>"创建","控制器" =>"阵营&# 34;}
  在2ms完成500内部服务器错误

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

  

protect_from_forgery:except => :创建

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

如果有诀窍,请告诉我!