在Sinatrapost上阅读参数
我正在研究我的第一个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
规范失败,因为last_response.body
为空。
我在这里错过了什么吗?
我还尝试从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只是不解析这些数据,因为它们没有表格参数。
表单参数看起来像这样
curl -X POST 127.1:4567 / -d“foo = bar”
您可以使用request.body.read
或使用rack contrib而不是params。
机架的contrib
- 使用
gem install rack-contrib
安装它 -
需要它
要求’机架’
要求’rack / contrib’
-
加载它
use Rack::PostBodyContentTypeParser
有了这个你可以使用params
正常的json post数据。 像这样的东西:
curl -X POST -H“Content-Type:application / json”-d'{“payload”:“xyz”}’127.1:4567 /
源代码: Sinatra控制器参数方法在JSON发布请求时显示为空 , http://jaywiggins.com/2010/03/using-rack-middleware-to-parse-json/