0

这感觉应该很简单,但是在谷歌搜索一个小时后,我无法弄清楚。

我正在将 Amazon S3“策略文档”作为 JSON 发布到我的服务器。我需要按原样对 JSON 进行编码但是 Rails 正在向“params”添加一些东西,这使我需要编码的 JSON 变得混乱。

这是我所拥有的:

class Api::Amazons3Controller < Api::BaseController

 def sign_policy
   policy_document = params.except(:action, :controller)
   encoded_policy_document = Base64.encode64(policy_document.to_json).gsub(/\n|\r/, '')
   signature = Base64.encode64(
     OpenSSL::HMAC.digest(
       OpenSSL::Digest::Digest.new('sha1'), 
       ENV['AWS_SECRET_ACCESS_KEY'], 
       policy_document)
   ).gsub(/\n/, '')

   response = { policy: policy_document, signature: signature }
   render json: response
 end
end

我正在尝试使用params.except(:action, :controller)来“清理”参数,但是policy_document.to_json在 JSON 周围添加了一个名为“amazons3”(控制器名称)的根注释,这是我不想要的. 我只需要对请求中的纯 json 进行编码。

任何帮助将不胜感激!

4

3 回答 3

0
class Api::Amazons3Controller < Api::BaseController
    self.include_root_in_json = false
end
于 2013-08-28T02:37:11.613 回答
0

那就试试这个

config/initializers/wrap_parameters.rb

if defined?(ActiveRecord)
  ActiveRecord::Base.include_root_in_json = false
end
于 2013-08-28T03:00:19.153 回答
0

我可以通过添加以下内容来禁用此控制器的参数包装:

class Api::Amazons3Controller < Api::BaseController
 wrap_parameters format: []
于 2013-08-28T03:31:09.197 回答