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

我正在尝试创建一个使用Sinatra的路由,它只接受带有Content-type: application/json 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请求,而不是响应其他人(例如Content-Type: application/xml )。

在Sinatra中是否有任何方法限制路由只接受具有特定Content-Type请求?

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

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

读这个

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

request.content_type会告诉你

Phil在RFC方面可能是正确的,但实际上很多事情都将内容类型放在POST请求中,因此知道它是什么很有用。

我认为它是这样的:

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