Ruby 在Sinatra post上读取参数

Ruby 在Sinatra post上读取参数,ruby,json,sinatra,Ruby,Json,Sinatra,我正在开发我的第一个Sinatra应用程序,我很难从post请求中获取参数 我正在使用MiniTest::Spec,我的规范看起来像 payload = File.read("./spec/support/fixtures/payload.json") post "/api/v1/verify_payload", { payload: payload }, { "CONTENT_TYPE" => "application/json" } last_response.body.mus

我正在开发我的第一个Sinatra应用程序,我很难从post请求中获取参数

我正在使用MiniTest::Spec,我的规范看起来像

 payload = File.read("./spec/support/fixtures/payload.json")
 post "/api/v1/verify_payload", { payload: payload }, { "CONTENT_TYPE" => "application/json" } 
 last_response.body.must_eql payload
这是我的路线

namespace '/api/v1' do
  post '/verify_payload' do
    MultiJson.load(params[:payload])
  end
end
规范失败,因为
最后一次\u响应。正文
为空

我是不是遗漏了什么

我还试图从
verify_payload
返回整个
params
,但在这种情况下,它返回了一个空字符串

更新

curl -X POST -H "Content-Type: application/json" -d '{"payload":"xyz"}' http://localhost:9292/api/v1/verify_payload
不会在服务器日志上返回任何内容,也不会返回任何错误

[2014-01-06 01:16:25] INFO  WEBrick::HTTPServer#start: pid=10449 port=9292
127.0.0.1 - - [06/Jan/2014 01:16:27] "POST /api/v1/verify_payload HTTP/1.1" 200 6 0.0220

谢谢,Sinatra没有解析这些数据,因为它们不是表单参数

表单参数如下所示

旋度-X柱127.1:4567/-d“foo=bar”

您可以使用
request.body.read
或使用rack contrib代替params

机架控制器

  • 使用
    gem安装机架contrib安装
  • 需要它
  • 需要“机架”

    需要“机架/控制器”

  • 加载它
    使用Rack::PostBodyContentTypeParser
  • 有了它,您可以像对待json post数据一样使用
    params
    。大概是这样的:

    curl-X POST-H“Content-Type:application/json”-d'{“payload”:“xyz”}'127.1:4567/


    来源:,

    该帖子应该由第三方服务调用。我不打算从UI调用它。您查看日志了吗?请参阅上面的更新。谢谢GET请求(当然是另一条路径)成功了吗?顺便说一句:阅读关于帕德里诺的评论。是的,请求工作正常<代码>卷曲http://localhost:9292/api/v1/whatever
    从get请求正确返回