Я действительно работаю над API, который использует Rails 4. Я хотел бы установить Content-Type
запроса в JSON, если клиент не указывает тип носителя в заголовке Content-Type
.
Чтобы получить это поведение, я попытался добавить следующий before_action
в мой ApplicationController
:
def set_request_default_content_type
request.format = :json
end
В моем методе RegistrationsController#create
у меня есть точка останова, чтобы проверить, все ли работает. Ну, трюк request.format
не работает, несмотря на то, что значение установлено на application/json
, кажется, что контроллер (или внутренние элементы Rails) не учитывает принятый запрос Content-Type как JSON.
Я выполнил запрос POST со следующим телом (и без Content-Type):
{"user" : {"email":"[email protected]","password":"foobarfoo"}}
Отладка с помощью Pry я вижу, что:
[2] api(#<V1::RegistrationsController>) _ request.format.to_s
=> "application/json"
[3] api(#<V1::RegistrationsController>) _ params
=> {
"action" => "create",
"controller" => "v1/registrations"
}
Это означает, что Rails не рассмотрел мой запрос с параметром request.format, настроенным с помощью Mime::JSON
, но вместо этого с Mime::ALL
и поэтому он не разобрал тело JSON запроса.: (