2

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

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

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

使用此代码,如果我在 Web 浏览器中访问 url:

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”中包含了这一点。

4

1 回答 1

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 中返回您想要的任何内容

于 2013-05-06T17:50:46.847 回答