【问题标题】:Rails 4 modify request parameters when custom mime-type given给定自定义 mime 类型时,Rails 4 修改请求参数
【发布时间】:2014-07-13 12:22:58
【问题描述】:

当控制器收到请求时修改params包含MessagePack,我写了一些这样的代码:

Mime::Type.register "application/x-mpac", :mpac

ActionDispatch::ParamsParser::DEFAULT_PARSERS.merge!(Mime::MPAC =>
  lambda do |contents|
    data = MessagePack.unpack(contents['data'])
    data.with_indifferent_access
  end
)

# Or

ActionController::Base.param_parsers[Mime::Type.lookup('application/x-mpac')] = lambda do |contents|
  data = MessagePack.unpack(contents['data'])
  data.with_indifferent_access
end

但这在 Rails 4.1.4 中不起作用

作为另一种方法,可以使用自定义中间件。但自定义中间件在 RSpec 控制器测试中不起作用。

就没有别的办法了吗?

【问题讨论】:

  • “不起作用”是什么意思?请提供语料库、错误和预期输出。
  • 例如发送带有参数{"data"=>"\x83\xA4name\xA6user18\xA8password\xACpassword1234\xACmachine_name\xABThe Machine"} 的请求和一个控制器方法,该方法期望提供解码的参数,就像{"name"=>"user18", "password"=>"password1234", "machine_name"=>"The Machine"}。但实际上这个控制器方法被赋予了{"data"=>"\x83\xA4name\xA6user18\xA8password\xACpassword1234\xACmachine_name\xABThe Machine"}。我想知道一种中断 ActionDispatch::ParamsParser 的方法

标签: ruby-on-rails mime-types ruby-on-rails-4.1


【解决方案1】:

将您的代码放入初始化程序并使用: MessagePack.unpack(内容) 代替: MessagePack.unpack(contents['data'])

在 Rails 4.2.4 上为我工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多