执行来自Rails 5的HTTP OPTIONS请求,用于CORS pre-flight或其他

时间:2016-10-03 20:43:15

标签: ruby-on-rails cors ruby-on-rails-5 rack-cors

编辑:我在一个拉取请求中重新添加了options方法给Rails,它现在应该是活动的。不再需要以下答案。请致电process(:options, path, **args)以执行选项请求。

如果需要,请参阅提交1f979184efc27e73f42c5d86c7f19437c6719612以获取更多信息。

我已经阅读了其他答案,并且它们似乎都没有在Rails 5中运行。令人惊讶的是Rails不仅提供了一个选项方法,但我们在这里。当然,如果你可以使用xdomain,你可能应该因为它更快(没有预检检查加倍延迟!),更容易(不需要傻标头/ HTTP方法!),以及更多支持(基本上工作)无处不在!)但有时你只需要支持CORS,而CORS宝石的某些内容使它不适合你。

1 个答案:

答案 0 :(得分: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