创建一个使用Sinatra的路由只接受某种内容类型

时间:2011-11-22 10:59:23

标签: ruby json sinatra content-type routes

我正在尝试使用Sinatra创建一条只接受POST Content-type: application/json但没有成功的路线。

我的方法如下:

post '/dogs', :provides => :json do
  # returns here a json response
end

使用curl进行测试,我看到:provides => :json配置了使用Content-Type: application/json进行响应的路由。

这是正确的,因为我还希望用POST请求的JSON消息进行响应,但我真的需要这条路由只响应Content-Type: application/json的POST请求,而不是例如其他人(例如{{} 1}})。

Sinatra有没有办法限制路线只接受某个Content-Type: application/xml的请求?

3 个答案:

答案 0 :(得分:12)

请求不包含“Content-Type”标头,而是包含“Accept”。 Sinatra基本上只响应包含“application / json”的“Accept”请求。只是为了确保:

post '/gods', :provides => :json do
  pass unless request.accept? 'application/json'
...
end

答案 1 :(得分:9)

阅读本文

http://rack.rubyforge.org/doc/classes/Rack/Request.html

request.content_type会告诉你

菲尔对于RFC可能是对的,但实际上很多事情都是在POST请求中放入内容类型,因此知道它是什么很有用。

答案 2 :(得分:0)

我认为它类似于:

pass unless request.accept? == 'application/json'