Выполнить запрос HTTP OPTIONS от Rails 5 для предполетного CORS или иным образом

Редактировать: я повторно добавил метод параметров в запросе на загрузку в Rails, который теперь должен быть активным. Ответ ниже не должен быть больше необходим. Вызов process(:options, path, **args) для того, чтобы предварительно запросить параметры.

См. Commit 1f979184efc27e73f42c5d86c7f19437c6719612 для получения дополнительной информации, если требуется.

Я прочитал другие ответы, и ни один из них, похоже, не работал в Rails 5. Удивительно, что Rails не просто поставляется с методом параметров, но мы здесь. Конечно, если вы можете использовать xdomain, вы, вероятно, должны это делать, потому что он быстрее (без предварительной проверки, удваивающий задержку!), Проще (нет необходимости в глупых заголовках / HTTP-методах!) И более поддерживается (работает в основном везде!), Но иногда вы просто Нужно поддерживать CORS, и что-то в геме CORS делает его неработоспособным для вас.

1 ответ

В верхней части вашего config/routes.rb В файл поместите следующее:

match "/example/",
  controller: "example_controller",
  action: "options_request",
  via: [:options]

И в вашем контроллере напишите:

def options_request
  # Your code goes here.
end

Если вы заинтересованы в написании интеграционного теста, существует некоторая дезинформация process метод, который на самом деле не является публичным методом. Для поддержки запросов OPTIONS из ваших интеграционных тестов создайте инициализатор (мой находится по адресу: config/initializers/integration_test_overrides.rb потому что я переопределяю ряд вещей) и добавляю следующий код:

class ActionDispatch::Integration::Session

  def http_options_request(path)
    process(:options, path)
  end

end

Так что вы можете позвонить http_options_request из вашего интеграционного теста.

Другие вопросы по тегам