这感觉应该很简单,但在谷歌上搜索了一个小时后,我想不通。
我正在将AmazonS3的"策略文档"作为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)"清理"params,但policy_document.to_json在json周围添加了一个名为"amazons3"(控制器名称)的根注释,这是我不想要的。我只需要对请求中的纯json进行编码。
如有任何帮助,我们将不胜感激!
class Api::Amazons3Controller < Api::BaseController
self.include_root_in_json = false
end
试试这个,然后
config/initializers/wrap_parameters.rb
if defined?(ActiveRecord)
ActiveRecord::Base.include_root_in_json = false
end
我可以通过添加:来禁用此控制器的参数封装
class Api::Amazons3Controller < Api::BaseController
wrap_parameters format: []