在rails XML请求中将方法设置为PUT

时间:2009-08-08 16:34:51

标签: ruby-on-rails http rest rack middleware

如果我这样做:

curl -X POST -H 'Content-type: application/xml' -d '<person>...</person>' 'http://0.0.0.0:3000/people/12?_method=PUT'

我得到“只允许获取,放置和删除请求。”为什么? Rails 2.3.2

3 个答案:

答案 0 :(得分:4)

luca是正确的,您需要在请求时发送X-Http-Method-Override标头。把_method =放在JSON主体中对我来说不起作用。你的curl命令行将如下所示:

 curl
  -H "X-Http-Method-Override: put"
  -H "Content-Type: application/json"
  -d "{\"user\":{\"email\":\"blah@example.com\"}}"
  www.site.com/users/username.json

答案 1 :(得分:3)

这实际上是rails最新版本中的故障。解决方案是使用put传递HTTP方法覆盖头。重要提示:标题的全名是http-x-http-method-override,但rails添加了http前缀,因此您应该修剪该部分。

答案 2 :(得分:0)

有一些事情可能会出错。

首先,您使用POST发送curl,但您的网址上有“魔术”_method参数,并且设置为{{1} }。根据错误,听起来Rails将PUT作为权威请求类型。不用那样试试看看会发生什么。

如果出现更多行人错误,可以将路由(在POST中配置为不允许config/routes.rb请求您尝试使用的操作。

如果您使用的是标准RESTful控制器,那么这很有道理,因为您正在访问一个成员(POST),默认情况下只允许/people/12GETPUT

我会尝试使用DELETE并从您的请求中删除curl -X PUT