如果我这样做:
curl -X POST -H 'Content-type: application/xml' -d '<person>...</person>' 'http://0.0.0.0:3000/people/12?_method=PUT'
我得到“只允许获取、放置和删除请求”。为什么?导轨 2.3.2
如果我这样做:
curl -X POST -H 'Content-type: application/xml' -d '<person>...</person>' 'http://0.0.0.0:3000/people/12?_method=PUT'
我得到“只允许获取、放置和删除请求”。为什么?导轨 2.3.2
luca 是正确的,您需要在请求中发送 X-Http-Method-Override 标头。将 _method=put 放在 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
这实际上是 Rails 最新版本中的故障。解决方案是使用 put 传递 HTTP 方法覆盖标头。重要提示:标头的全名是 http-x-http-method-override 但 rails 添加了 http 前缀,因此您应该修剪该部分。
有几件事可能会出错。
首先,您发送的是POST
with ,但您的 URL 上curl
有“magic”参数,并且它设置为. 根据错误,听起来 Rails 正在作为权威请求类型。尝试不这样做,看看会发生什么。_method
PUT
POST
在一个更普通的错误中,路由(config/routes.rb
可以配置为不允许POST
对您尝试使用的操作的请求。
如果您使用的是标准的 RESTful 控制器,这很有意义,因为您正在访问一个成员 ( /people/12
),默认情况下它只允许GET
、PUT
和DELETE
.
我会尝试使用并从您的请求中curl -X PUT
删除。?_method=PUT