1

我正在构建一个客户端应用程序,它使用 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

谁能想出一个聪明的解决方案?

4

0 回答 0