【问题标题】:Perform HTTP OPTIONS request from Rails 5 for CORS pre-flight or otherwise从 Rails 5 执行 HTTP OPTIONS 请求以进行 CORS 飞行前或其他
【发布时间】:2016-10-03 20:43:14
【问题描述】:

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

如果需要,请参阅提交 1f979184efc27e73f42c5d86c7f19437c6719612 了解更多信息。

我已经阅读了其他答案,但似乎没有一个在 Rails 5 中有效。令人惊讶的是,Rails 不只是提供选项方法,但我们在这里。当然,如果你可以使用 xdomain,你可能应该(编辑:我不再持有这种观点,CORS 有优势)因为它更快(没有预检检查加倍延迟!),更容易(没有需要愚蠢的标头/HTTP 方法!),并且支持更多(基本上在任何地方都可以使用!)但有时您只需要支持 CORS,而有关 CORS gem 的某些内容使其不适合您。

【问题讨论】:

    标签: ruby-on-rails cors ruby-on-rails-5 rack-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

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 2018-04-13
      • 2018-05-19
      • 1970-01-01
      • 2014-12-05
      • 2014-12-27
      • 2018-06-18
      • 2019-02-27
      • 2015-09-03
      相关资源
      最近更新 更多