我正在构建一个客户端应用程序,它使用 CORS 将 JSON 跨域发布到不同服务器上的 Rails 3.2 应用程序。不幸的是,我们需要支持 IE9,这意味着我们回退到使用 XDomainRequest (XDR) 在 IE 中发送我们的跨域请求。
XDR 的主要限制是它不支持设置像“Content-type”这样的标头,这意味着 Rails 服务器不知道它正在接收 JSON,因此不解析它。
我通过使用jQuery.param
将数据作为 url 编码的表单数据发送来简单地解决了这个问题。但是,我们需要发送的一些数据是嵌套的 GeoJSON,它会出现乱码jQuery.param
,所以我必须将 POST 正文作为 JSON 发送。
在 config/initializers/wrap_parameters.rb 我设置:
ActiveSupport.on_load(:action_controller)
wrap_parameters format: [:json, nil]
end
model_name
...所以当内容类型为 nil 时,ActionController 将参数嵌套在里面。
但是,我仍然需要 Rails 来尝试JSON.parse()
从请求 where 中获取数据"Content-type" => nil
。我可以在需要它的控制器中手动执行此操作(这不是很干净),但我希望我能够让 Rails 为所有{content-type: nil}
请求执行此操作。
我一直在查看 Rails 源代码,但我发现的内容并没有让我很有希望。这个方法似乎被硬编码来检查:json,如果是,则解析,这意味着我不能从配置中修改它: https ://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/中间件/params_parser.rb#L43
谁能想出一个聪明的解决方案?