Set-Methode setzen in Schienen XML-Anfragen
-
12-09-2019 - |
Frage
, wenn ich dies tun:
curl -X POST -H 'Content-type: application/xml' -d '<person>...</person>' 'http://0.0.0.0:3000/people/12?_method=PUT'
ich „nur bekommen, setzen und Anfragen erlaubt sind zu löschen.“ Warum? Rails 2.3.2
Lösung 2
Dies ist tatsächlich eine Fehlfunktion in Schienen neueren Versionen. Die Lösung ist die HTTP-Methode überschreiben Header mit Put passieren. Wichtig: der vollständige Name des Headers ist http-x-http-Methode-Überschreibung, aber Schienen fügen den http-Präfix, so dass Sie, dass ein Teil trimmen sollten.
Andere Tipps
luca korrekt ist, müssen Sie den X-Http-Methode-Aufschalten Header mit Ihrer Anfrage senden. Putting _method = in der JSON Körper funktionierte nicht für mich. Ihre curl Befehlszeile wie folgt aussehen:
curl
-H "X-Http-Method-Override: put"
-H "Content-Type: application/json"
-d "{\"user\":{\"email\":\"blah@example.com\"}}"
www.site.com/users/username.json
Es gibt ein paar Dinge, die schief gehen könnten.
Zunächst einmal, du bist ein POST
mit curl
zu senden, aber Sie haben die „Magie“ _method
Parameter auf Ihrer URL bekam, und es ist auf PUT
. Basierend auf dem Fehler, es klingt wie Rails ist POST
als maßgeblicher Anforderungstyp nehmen. Versuchen Sie es, ohne dass und sehen, was passiert.
Auf einem Fußgänger Fehler, das Routing (in config/routes.rb
konfiguriert werden könnte, um nicht POST
Ersuchen für die Aktion können Sie versuchen, zu verwenden.
Wenn Sie einen Standard RESTful-Controller verwenden, die guten Sinn macht, weil Sie Mitglied sind zugreift (/people/12
), die standardmäßig nur erlaubt GET
, PUT
und DELETE
.
Ich würde versuchen, curl -X PUT
verwenden und die ?_method=PUT
aus Ihrer Anfrage fallen zu lassen.