创建一个使用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'