1 module ActionController
3 ActionController
::Base.param_parsers
[Mime
::XML] = :xml_simple
4 ActionController
::Base.param_parsers
[Mime
::JSON] = :json
11 if params
= parse_formatted_parameters(env)
12 env["action_controller.request.request_parameters"] = params
19 def parse_formatted_parameters(env)
20 request
= Request
.new(env)
22 return false if request
.content_length
.zero
?
24 mime_type
= content_type_from_legacy_post_data_format_header(env) || request
.content_type
25 strategy
= ActionController
::Base.param_parsers
[mime_type
]
27 return false unless strategy
31 strategy
.call(request
.raw_post
)
32 when :xml_simple, :xml_node
33 body
= request
.raw_post
34 body
.blank
? ? {} : Hash
.from_xml(body
).with_indifferent_access
36 YAML
.load(request
.raw_post
)
38 body
= request
.raw_post
42 data = ActiveSupport
::JSON.decode(body
)
43 data = {:_json => data} unless data.is_a
?(Hash
)
44 data.with_indifferent_access
49 rescue Exception
=> e
# YAML, XML or Ruby code block errors
51 { "body" => request
.raw_post
,
52 "content_type" => request
.content_type
,
53 "content_length" => request
.content_length
,
54 "exception" => "#{e.message} (#{e.class})",
55 "backtrace" => e
.backtrace
}
58 def content_type_from_legacy_post_data_format_header(env)
59 if x_post_format
= env['HTTP_X_POST_DATA_FORMAT']
60 case x_post_format
.to_s
.downcase