【问题标题】:Sinatra OPTIONS HTTP VerbSinatra 选项 HTTP 动词
【发布时间】:2010-12-04 04:15:49
【问题描述】:

Sinatra 是否支持 OPTIONS HTTP 动词?比如:

options '/' do
  response.headers["Access-Control-Allow-Origin"] = "*"
  response.headers["Access-Control-Allow-Methods"] = "POST"

  halt 200
end

【问题讨论】:

    标签: sinatra


    【解决方案1】:

    经过一番修改后,我设法让它工作:

    before do
      if request.request_method == 'OPTIONS'
        response.headers["Access-Control-Allow-Origin"] = "*"
        response.headers["Access-Control-Allow-Methods"] = "POST"
    
        halt 200
      end
    end
    

    编辑:

    在对这个问题进行了更多查看之后,我意识到 GitHub 上有一个 PULL 请求,用于添加 OPTIONS 动词 (https://github.com/sinatra/sinatra/pull/129)。我采用了解决方案并使用以下 sn-p 破解了它:

    configure do
      class << Sinatra::Base
        def options(path, opts={}, &block)
          route 'OPTIONS', path, opts, &block
        end
      end
      Sinatra::Delegator.delegate :options
    end
    

    现在我可以简单地使用:

    options '/' do
      ...
    end
    

    编辑:

    拉取请求应该被合并。不再需要破解。

    【讨论】:

    • 如果您正在阅读本文,请查看my answer,现在 Sinatra 实现了开箱即用的options 方法
    【解决方案2】:

    是的,已经做到了Sinatra Routes documentation

    【讨论】:

      【解决方案3】:

      不,它没有。如果您查看 GitHub 上的代码,您可以看到 HTTP 动词的定义位置,而 options 不是其中之一。

      【讨论】:

      • @KevinSylvestre 鉴于现有的路由动词似乎是作为 Sinatra::Base 上的类方法实现的(请参阅 Jergason 提供的链接),您应该能够定义自己的:def Sinatra::Base.options(path,opts={},&amp;bk); route 'OPTIONS', path, opts, &amp;bk end (未经测试)。
      • @Phrogz 谢谢!那 sn-p 帮助我弄清楚如何修补它。请参阅我的更新答案。
      【解决方案4】:

      答案很简单,是的! (在自述文件中的路线下方查看http://www.sinatrarb.com/intro.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-08
        • 2017-08-09
        • 1970-01-01
        • 2012-01-14
        • 1970-01-01
        • 2010-12-12
        • 2018-05-09
        • 1970-01-01
        相关资源
        最近更新 更多