Mac*_*sel 18 post json ruby-on-rails http ruby-on-rails-3
我在Ruby on Rails 3中有一个控制器方法,它接受application/JSON作为内容类型.这一切都按预期工作,但我实际上不希望rails自动解析POST请求正文中的JSON.此方法充当网关,只是将信息传递到队列中,并且可能非常大.我不想浪费时间处理数据到@_params,因为它是不必要的.
我相信我可以通过将请求标头中的内容类型设置为其他内容来解决这个问题,但我希望对于HTTP请求在语义上是正确的.
如何禁用此功能?
编辑:更具体地说,如何才能为这一条路线编辑此功能?
Mar*_*ine 13
参数解析在actionpack中非常深入lib/action_dispatch/middleware/params_parser.rb.
我会说你最好的办法是拦截Rack的请求,就像这样.
在 lib/raw_json.rb
module Rack
class RawJSON
def initialize(app)
@app = app
end
def call(env)
request = Request.new(env)
if request.content_type =~ /application\/json/i
# test request.path here to limit your processing to particular actions
raw_json = env['rack.input'].read
env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded'
env['rack.input'] = StringIO.new("raw_json=#{raw_json}")
end
return @app.call(env)
end
end
end
Run Code Online (Sandbox Code Playgroud)
在config.ru,调用之前插入此run <your app name>::Application
require 'raw_json'
use Rack::RawJSON
Run Code Online (Sandbox Code Playgroud)