Rails 5.2 возврат 406 с запросом Axios

Rails 5.2 возврат 406 с запросом Axios

13.03.2019 11:55:10 Просмотров 34 Источник

У меня есть rails API в Rails 5.2 и интерфейс в Vuejs, использующий Axios для запроса API. Когда я спрашиваю с почтальоном на маршруте

[Получить] http://localhost:3000/foo

Я получаю ожидаемый ответ JSON.

Но когда я запрос с Аксиос :

import axios from 'axios'

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

Я получил этот ответ от сервера :

CleanwalksController#index отсутствует шаблон для этого формата запроса и варианта. запрос.форматы: ["text/html"] запрос.вариант: []

У меня есть следующая конфигурация / 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
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/55137752/rails-5-2-returning-406-with-axios-request#comment97023677_55137752
Вы пробовали позвонить в localhost: 3000/foo?json , чтобы заставить запрос использовать вариант JSON (а не полагаться на заголовок)?

Ответы - Rails 5.2 возврат 406 с запросом Axios / Rails 5.2 returning 406 with Axios Request

Является ответом!
tcharlyson

13.03.2019 12:21:07

Я думаю, что ваша проблема исходит из вашего взгляда, есть ли у вас файл с именем index.формат html.Эрб. В противном случае можно определить формат множественного ответа следующим образом :

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
Steffan Perry

06.01.2020 08:58:41

У меня была точно такая же проблема. Все отлично работало в моих спецификациях и в postman, но по какой-то причине я получал 406 с vue/axios.

После того как я долго теребил волосы я обнаружил опечатку в моем файле маршрутов:

namespace :v1, default: { format: :json } do

Это должно было быть по умолчанию (множественное число)

namespace :v1, defaults: { format: :json } do
Помочь в развитии проекта:
Закрыть X