método set para colocar em solicitações XML trilhos
-
12-09-2019 - |
Pergunta
se eu fizer isso:
curl -X POST -H 'Content-type: application/xml' -d '<person>...</person>' 'http://0.0.0.0:3000/people/12?_method=PUT'
Eu recebo "Só GET, PUT, e os pedidos de exclusão são permitidos." Por quê? Rails 2.3.2
Solução 2
Este é realmente um mau funcionamento em trilhos versões recentes. A solução é passar o cabeçalho HTTP com substituição do método de venda. Importante: o nome completo do cabeçalho é http-x-http-method-override mas trilhos acrescenta o prefixo http assim que você deve cortar essa parte.
Outras dicas
luca está correto, você precisa enviar o cabeçalho X-HTTP-Method-Override com o seu pedido. Colocando _method = colocar no corpo JSON não funcionou para mim. Sua linha de comando curl será parecido com este:
curl
-H "X-Http-Method-Override: put"
-H "Content-Type: application/json"
-d "{\"user\":{\"email\":\"blah@example.com\"}}"
www.site.com/users/username.json
Há um par de coisas que poderiam estar errados.
Primeiro, você está enviando uma POST
com curl
, mas você tem o parâmetro _method
"mágica" em seu URL, e ele é definido como PUT
. Com base no erro, parece que Rails está tomando POST
como o tipo de solicitação de autoridade. Experimentá-lo sem isso e ver o que acontece.
Em um erro mais pedestre, o encaminhamento (em config/routes.rb
pode ser configurado para não permitir que os pedidos POST
para para a ação que você está tentando usar.
Se você estiver usando um controlador RESTful padrão, que faz todo o sentido, porque você está acessando um membro (/people/12
), que por padrão só permite GET
, PUT
e DELETE
.
Eu tentaria usando curl -X PUT
e soltando a ?_method=PUT
do seu pedido.