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

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

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

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

  • 如果我不能信任(外部)客户端传递正确的 header 怎么办?换句话说,我想让我的应用程序表现得好像客户端总是传递 'Content-type: application/json' header ,即使客户端实际上没有?

    最佳答案

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

    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

    关于ruby-on-rails - 如何让 Rails 将发布的字符串解析为 json 而不发送 'Content-type: application/json' header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915653/

    相关文章:

    sql - 如何在 Ruby on Rails 迁移中使用 'gaps' 修复列的​​顺序

    ruby-on-rails - CPU利用率问题

    ruby-on-rails - Rails-如何在searchkick中过滤字符串字段?

    ruby-on-rails-3 - 带有 Mongoid Embedded 和 Standalone 的 Rails 模型

    ruby-on-rails-3 - 将列类型从字符变化更改为不带时区的时间戳

    ruby-on-rails - Rails:为第3方POST请求禁用CSRF

    ruby-on-rails-3 - 将模型移动到 gem 中 - Rails 4.1

    javascript - Highcharts - JSON 系列数据未正确显示

    Android查询网络错误-101

    java - 将 Java 日期转换为 JSON 日期时间