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

Pas*_*cke 6 rest json ruby-on-rails content-negotiation ruby-on-rails-3

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

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

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

小智 1

您可以使用以下命令在操作中设置类型

request.format = :json
Run Code Online (Sandbox Code Playgroud)

我用它测试了

class ExampleController < ApplicationController

  def always_accept_json
    request.format = :json
    respond_to do |format|
      format.json { raise "HEY" }
      format.html 
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

您可以在任何 ActionController 中的任何位置执行此操作,即如果您希望在顶层使所有请求以 content_type 的形式显示在您的应用程序中,只需将其作为该集的application/json过滤器即可application_controller.rbrequest.format