我正在尝试使用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
的请求?
答案 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'