2010-12-04 32 views
12

Sinatra是否支持OPTIONS HTTP動詞?例如:Sinatra選項HTTP動詞

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

    halt 200 
end 

回答

26

後位黑客的我設法得到它的工作使用:

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

    halt 200 
    end 
end 

編輯:

後一些更多的關於這個問題四處尋找,我意識到,PULL請求了上GitHub添加了OPTIONS動詞(https://github.com/sinatra/sinatra/pull/129)。我把解決方案,使用下面的代碼片段黑客攻擊:

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 

編輯:

拉入請求應合併。不再需要黑客。

2

不,它不。如果您查看GitHub上的代碼,則可以看到HTTP動詞的定義位置,而options不是其中的一個。

+0

如何添加它呢? – 2010-12-04 04:33:51

+2

@KevinSylvestre鑑於現有的路由動詞在Sinatra :: Base上實現爲類方法(請參閱Jergason給出的鏈接),您應該可以定義自己的:def Sinatra :: Base.options(path ,opts = {},&bk); route'OPTIONS',path,opts,&bk end`(未測試)。 – Phrogz 2010-12-05 17:04:43