如果我这样做:
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
答案 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/12
,GET
和PUT
。
我会尝试使用DELETE
并从您的请求中删除curl -X PUT
。