In realtà sto lavorando su un'API che utilizza Rails 4. Vorrei impostare lo Content-Type
di una richiesta a JSON se il client non specifica un tipo di supporto nell'intestazione Content-Type
.Forza tutte le richieste ricevute Content-Type a JSON
Al fine di ottenere che il comportamento ho provato ad aggiungere la seguente before_action
nel mio ApplicationController
:
def set_request_default_content_type
request.format = :json
end
Nel mio metodo RegistrationsController#create
ho un punto di interruzione per controllare se tutto funziona. Bene, il trucco request.format
non funziona, nonostante il valore sia impostato su application/json
, sembra che il controller (o gli interni di Rails) non considerino il tipo di contenuto della richiesta ricevuta come JSON.
ho fatto una richiesta POST con il seguente (e non Content-Type):
{"user" : {"email":"[email protected]","password":"foobarfoo"}}
Con il debug con leva vedo che:
[2] api(#<V1::RegistrationsController>) _ request.format.to_s
=> "application/json"
[3] api(#<V1::RegistrationsController>) _ params
=> {
"action" => "create",
"controller" => "v1/registrations"
}
Significa che Rails non ha avuto ho considerato la mia richiesta con request.format configurato con Mime::JSON
, ma invece con Mime::ALL
e quindi non ha analizzato il corpo JSON della richiesta. :(
penso che ed usa [wrap_parameters()] (http://apidock.com/rails/ActionController/ParamsWrapper/ClassMethods/wrap_parameters) in te 'ActionController' –
' ActionController :: ParamsWrapper' è abilitato di default per il formato json. Ma non funziona. Al momento non utilizzo MetalController ma una classica architettura Rails con controller standard. – Mich