Rails 路由接受 http 和 json 请求
Posted
技术标签:
【中文标题】Rails 路由接受 http 和 json 请求【英文标题】:Rails route accetping http and json requests 【发布时间】: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”中包含了这一点。
【问题讨论】:
你的动作是什么样的? 【参考方案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 :)以上是关于Rails 路由接受 http 和 json 请求的主要内容,如果未能解决你的问题,请参考以下文章
即使 Rails 服务器配置为接受所有请求,Angular 发布请求也未通过预检
jquery ajax post请求不接受绝对url rails应用程序