metodo set a mettere in rotaie richieste XML
-
12-09-2019 - |
Domanda
se faccio questo:
curl -X POST -H 'Content-type: application/xml' -d '<person>...</person>' 'http://0.0.0.0:3000/people/12?_method=PUT'
ottengo "Solo GET, PUT e DELETE richieste sono consentiti." Perché? Rails 2.3.2
Soluzione 2
Questo è in realtà un malfunzionamento in Rails versioni più recenti. La soluzione è passare l'intestazione di override metodo HTTP con put. Importante: il nome completo della testata è http-x-http-Metodo-override ma rotaie aggiunge il prefisso http così si dovrebbe ritagliare quella parte.
Altri suggerimenti
luca è corretta, è necessario inviare l'intestazione X-Http-Metodo-override con la vostra richiesta. Mettendo _method = mettere nel corpo JSON non ha funzionato per me. La riga di comando ricciolo sarà simile a questa:
curl
-H "X-Http-Method-Override: put"
-H "Content-Type: application/json"
-d "{\"user\":{\"email\":\"blah@example.com\"}}"
www.site.com/users/username.json
Ci sono un paio di cose che potrebbero andare storto.
Prima di tutto, si sta inviando un POST
con curl
, ma hai il parametro _method
"magia" sul vostro URL, ed è impostato per PUT
. Sulla base l'errore, suona come Rails sta prendendo POST
come il tipo di richiesta autorevole. Provatelo senza quella e vedere cosa succede.
Su un errore più pedonale, l'instradamento (in config/routes.rb
potrebbe essere configurato in modo da non consentire le richieste POST
per per l'azione che si sta tentando di utilizzare.
Se si utilizza un controller RESTful standard che fa buon senso, perché si sta accedendo un membro (/people/12
) che di default permette solo GET
, PUT
e DELETE
.
Vorrei provare a utilizzare curl -X PUT
e far cadere il ?_method=PUT
dalla vostra richiesta.