如何让Rails将发布的字符串解析为json而不发送'Content-type:application / json'标题?

时间:2012-10-16 13:22:28

标签: ruby-on-rails ruby-on-rails-3 json rest content-negotiation

当发送标题“Content-type:application / json”时,Rails会在多个级别更改行为:

  • 提交的帖子正文被解析为json而不仅仅是字符串参数
  • wrap_parameters:format =>在解析发布的提到的参数时使用config / initializers / wrap_parameters.rb中的[:json](所以你可以发送带或不带根元素的json)

如果我不能信任(外部)客户端传递正确的标题怎么办?换句话说,我希望我的应用程序的行为好像客户端始终传递'Content-type:application / json'标头,即使客户端实际上没有?

1 个答案:

答案 0 :(得分:1)

您可以使用

在动作中设置类型
request.format = :json

我使用

测试了它
class ExampleController < ApplicationController

  def always_accept_json
    request.format = :json
    respond_to do |format|
      format.json { raise "HEY" }
      format.html 
    end
  end
end

您可以在Any ActionController中的任何位置执行此操作,即如果您希望在顶层将所有请求作为content_type application/json显示在您的应用中,只需将其设置为application_controller.rb设置request.format的过滤器即可}