【问题标题】:Rails 3 GET Method, No request.bodyRails 3 GET方法,没有request.body
【发布时间】:2011-08-19 08:36:59
【问题描述】:

我想知道为什么当我使用到使用 GET 方法的控制器的路由时,Rails 会剥离请求的主体。如果我将路由定义更改为 POST,则正文通过。

我正在尝试将 JSON 编码的选项哈希发送到 GET /customer/find,以便它返回客户列表。它没有改变任何东西,所以它不应该是一个 POST。

请有人解释我在这里缺少什么。

编辑:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html 详细说明 POST 请求不必创建某些内容,但如果确实如此,它应该返回 201。状态码 200(OK)、204(No Content)对于 POST 方法也有效。授予 aVenger 的问题是因为他对自己的回答发表了评论。

【问题讨论】:

  • 请参阅此处,了解为什么在 GET 请求中包含正文是一个坏主意:stackoverflow.com/questions/978061/http-get-with-request-body
  • GET 像往常一样使用无正文。没有办法在请求中封装一些东西。
  • “它没有改变任何东西,所以它不应该是一个 POST”应该是“选项不影响发送的结果,所以它不应该是一个 POST”。如果您真的想使用 GET,请在查询字符串中传递参数,否则切换到 POST。
  • 如果您只是检索有关资源的信息,您应该对选项哈希进行 url 编码并将其作为查询字符串传递给 GET 请求。 w3.org/Protocols/rfc2616/rfc2616-sec9.html

标签: ruby-on-rails ruby-on-rails-3 routing


【解决方案1】:

为什么不直接将 json 哈希作为请求参数发送?如果它太大,你还是应该使用 POST。

【讨论】:

  • GET 是幂等的,POST 不是。 POST 通常用于更改某些内容。这是一种意识形态。
  • 一个 POST 请求可以改变一些东西,不是必须的。
  • 据此:w3.org/Protocols/rfc2616/rfc2616-sec9.html,aVenger 是正确的。 POST 不必创建任何内容,但如果创建了,它应该返回状态 201,如果没有,它可以返回状态 200,如果没有内容,则返回 204。
猜你喜欢
  • 1970-01-01
  • 2022-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多