Procédé ensemble de rails PUT dans les demandes XML
-
12-09-2019 - |
Question
si je fais ceci:
curl -X POST -H 'Content-type: application/xml' -d '<person>...</person>' 'http://0.0.0.0:3000/people/12?_method=PUT'
Je reçois « seulement obtenir, mettre, et les demandes de suppression sont autorisées. » Pourquoi? Rails 2.3.2
La solution 2
Il est en fait un dysfonctionnement dans les versions récentes rails. La solution consiste à adopter la méthode HTTP en-tête de remplacement avec put. Important: le nom complet de l'en-tête est http-x-http-méthode-override mais rails ajoute le préfixe http de sorte que vous devez couper cette partie.
Autres conseils
luca est correcte, vous devez envoyer l'en-tête X-Http-Méthode-Dérogation à votre demande. Mettre _method = mettre dans le corps JSON ne fonctionne pas pour moi. Votre ligne de commande boucle ressemblera à ceci:
curl
-H "X-Http-Method-Override: put"
-H "Content-Type: application/json"
-d "{\"user\":{\"email\":\"blah@example.com\"}}"
www.site.com/users/username.json
Il y a deux choses qui pourraient aller mal.
Tout d'abord, vous envoyez un POST
avec curl
, mais vous avez le paramètre _method
« magique » sur votre URL, et il est mis à PUT
. Sur la base de l'erreur, il semble que Rails prend des POST
comme type de demande faisant autorité. Essayez sans cela et voir ce qui se passe.
En cas d'erreur plus piétonne, le routage (en config/routes.rb
pourrait être configuré pour ne pas autoriser les demandes de POST
pour l'action que vous essayez d'utiliser.
Si vous utilisez un contrôleur standard RESTful, qui fait le bon sens, parce que vous accédez à un membre (/people/12
) qui, par défaut ne permet GET
, PUT
et DELETE
.
Je voudrais essayer d'utiliser curl -X PUT
et laisser tomber le ?_method=PUT
de votre demande.