Tôi đang thực sự làm việc trên API sử dụng Rails 4. Tôi muốn đặt Content-Type
yêu cầu JSON nếu khách hàng không chỉ định loại phương tiện trong tiêu đề Content-Type
.Buộc tất cả các yêu cầu nhận được Kiểu nội dung vào JSON
Để có được hành vi đó tôi đã cố gắng để thêm before_action
sau trong ApplicationController
tôi:
def set_request_default_content_type
request.format = :json
end
Trong phương pháp RegistrationsController#create
của tôi, tôi có một breakpoint để kiểm tra xem tất cả mọi thứ đang làm việc. Vâng, thủ thuật request.format
không hoạt động, mặc dù giá trị được đặt thành application/json
có vẻ như bộ điều khiển (hoặc Rails internals) không xem xét Content-Type của yêu cầu nhận được dưới dạng JSON.
Tôi đã làm một yêu cầu POST với cơ thể sau đây (và không có Content-Type):
{"user" : {"email":"[email protected]","password":"foobarfoo"}}
Bằng cách gỡ lỗi với Pry tôi thấy rằng:
[2] api(#<V1::RegistrationsController>) _ request.format.to_s
=> "application/json"
[3] api(#<V1::RegistrationsController>) _ params
=> {
"action" => "create",
"controller" => "v1/registrations"
}
Nó có nghĩa là Rails không có xem xét yêu cầu của tôi với request.format được định cấu hình với Mime::JSON
, nhưng thay vào đó là Mime::ALL
và do đó nó không phân tích cú pháp nội dung JSON của yêu cầu. :(
tôi nghĩ bạn ne ed sử dụng [wrap_parameters()] (http://apidock.com/rails/ActionController/ParamsWrapper/ClassMethods/wrap_parameters) trong bạn 'ActionController' –
' ActionController :: ParamsWrapper' được kích hoạt theo mặc định cho định dạng json. Nhưng nó không hoạt động. Tại thời điểm này tôi không sử dụng MetalController nhưng là một kiến trúc Rails cổ điển với các bộ điều khiển tiêu chuẩn. – Mich