首页 > 解决方案 > Rails 5.2 使用 Axios 请求返回 406

问题描述

我在 Rails 5.2 中有一个 Rails API,在 Vuejs 中有一个前端,使用 Axios 请求 API。当我在路线上向邮递员提出要求时

[GET] http://localhost:3000/foo

我得到了预期的 JSON 响应。

但是当我向 Axios 请求时:

import axios from 'axios'

export default {
  getAll () {
    return axios.get('http://localhost:3000/foo', {
      headers: { 'Content-Type': 'application/json' }
    })
  }
}

我从服务器得到了这个响应:

CleanwalksController#index 缺少此请求格式和变体的模板。request.formats: ["text/html"] request.variant: []

我有以下 config/cors.rb :

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'
    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

当我尝试直接访问http://localhost:3000/foo时遇到了同样的问题。

这是我的控制器:

class FooController < ApplicationController

  def index
    @foo = foo.all
  end

end

标签: ruby-on-railsrubyvue.jscross-domainaxios

解决方案


我认为您的问题来自您的观点,您是否有一个名为 index.html.erb 的文件。否则,您可以定义多重响应格式如下:

class FooController < ApplicationController

def index
  @foo = foo.all
  respond_to do |format|
    format.html { render :index }
    format.json { render json: @foo, status: 200 }
  end
end

end

推荐阅读