【问题标题】:Rails route accetping http and json requestsRails 路由接受 http 和 json 请求
【发布时间】:2013-04-30 12:32:45
【问题描述】:

我正在使用 rails 创建一个 REST api,我有一个与路由以及如何接受我的 api 请求有关的简单问题。

在我的路线文件中,我有以下代码:

namespace :api do
   namespace :v1 do
      resources :productOp, :path => "product", :defaults => { :format => 'json' }
   end
end

使用此代码,如果我在网络浏览器中访问该网址:

http://localhost:3000/api/v1/product

它工作正常。另一方面,它只接受 json 格式的帖子

如果我删除 ":defaults => { :format => 'json' }" 我无法在网络浏览器中打开相同的 url,我会收到 406 http 消息,因为它试图找到我的#index HTML。

谁能为我解释为什么当我删除“:defaults => { :format => 'json' }”时会发生这种情况? 以及如何制作一个接受 http post 请求和 json 的 API?

只是为了添加信息,我的控制器总是以 json 格式响应,因为我在第一行的控制器“respond_to :json”中包含了这一点。

【问题讨论】:

  • 你的动作是什么样的?

标签: ruby-on-rails ruby json rest


【解决方案1】:

当你在那里有默认哈希值时,你是在告诉 Rails 默认情况下将请求设为 JSON,无论你是否指定它。通过删除它,rails 不会这样做,所以当你尝试自己导航到页面时,rails 会假定它是一个 HTML 请求,如果你不处理它就会失败。

忘记了

在您的控制器操作中,您可能没有告诉 rails 它也可以返回 HTML。如果它只会返回 JSON,那么 rails 无法正常工作是正确的,但请注意,这并不是说它无法找到,您得到的是 406 而不是 404。

尝试类似:

respond_to do |format|
  format.json { render json: @whatever }
  format.html {}
end

然后,html 将简单地呈现您的索引视图,json 请求将在 JSON 中返回您想要的任何内容

【讨论】:

  • 谢谢,但它没有用,如果我这样做,我会收到一条模板丢失消息...当我提出请求时,它会尝试查看视图文件夹,而不是显示 json
  • 如果您正在执行标准 URL 请求,那就对了。这样做会导致 Rails 假定您需要 HTML,并且format.html 将触发。如果您想运行 URL 请求并返回 JSON,那么只需请求 URL http://localhost:3000/api/v1/product.json,您应该返回 JSON :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2020-07-04
相关资源
最近更新 更多