【问题标题】:set method to PUT in rails XML requests在 Rails XML 请求中将方法设置为 PUT
【发布时间】:2009-08-08 16:34:50
【问题描述】:

如果我这样做:

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

我收到“仅允许获取、放置和删除请求”。为什么?导轨 2.3.2

【问题讨论】:

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


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你有关于 Rails 损坏的规范的参考吗?我认为这种情况下的请求正文只是一个文本块,就像上传文件时的 BLOB,不应该由 Rails 的 http 部分处理。 Rails 然后检测格式并将 JSON 提取到一个对象很好,但 HTTP 规范几乎不需要?所以我对在这种情况下 Rails 出现故障的地方有点困惑......
      • 需要链接到 Rails Github 提交:P
      【解决方案3】:

      有几件事可能会出错。

      首先,您发送的是带有curlPOST,但您的网址中有“神奇”的_method 参数,它设置为PUT。根据错误,听起来 Rails 将POST 作为权威请求类型。不使用它试试看会发生什么。

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

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

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

      【讨论】:

      • 你是对的.. 我没有提到的是,虽然 curl 能够发送 PUT 请求,但大多数浏览器都不能,我正在用 flex 编写,它没有能力.因此,我必须在 GET 和 POST 之间进行选择,并尝试让它理解它是 PUT ...
      • 有道理。您是否尝试将小写“put”作为您的 _method 参数?我查看了 Rails 生成的表单(更新表单使用 PUT),它使用了以下代码:&lt;input name="_method" type="hidden" value="put" /&gt;
      • /people/12 与 REST 有什么关系?
      • Wahnfrieden,这是 Rails 的 RESTful 路由的标准格式。见guides.rubyonrails.org/routing.html
      猜你喜欢
      • 2021-01-24
      • 2020-07-05
      • 2017-04-29
      • 1970-01-01
      • 2011-11-03
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      相关资源
      最近更新 更多