シナトラREADME says:Sinatraのリクエスト["SOME_HEADER"]はPOSTで動作しません。 docのバグ?
request["SOME_HEADER"] # value of SOME_HEADER header
このアプリを考える:
はrequire 'sinatra'
post '/env' do
env['HTTP_X_FOO']
end
post '/request' do
request['X-Foo']
end
post '/request_rack_http_format' do
request['HTTP_X_FOO']
end
最初のスペックが通過します。次の二つは失敗:
describe "Sinatra should place the header in" do
before(:all) do
header 'X-Foo', 'Bar'
end
example "env" do
post '/env'
last_response.body.should == 'Bar' #pass
end
example "request[]" do
post '/request'
last_response.body.should == 'Bar' #fail; got ""
end
example "request[] (rack format)" do
post '/request_rack_http_format'
last_response.body.should == 'Bar' #fail; got ""
end
end
は、シナトラが実際に
[]
で何もしないソースを見てみると、それはラックで
GET
と
POST
の組合として実装されています。そして、
POST
just returns the form hash。
GET
の場合はクエリハッシュです。 3つのルートすべてで、
request.params
は空です。
私の質問:これはドキュメントのバグですか、私はrequest[]
の使い方を誤解していますか?今のところ、私のアプリケーションはenv[]
メソッドで正常に動作しています。しかし、私はそれを「正しい」行いたい。
私はあなたが正しいと思っています[ラックソース自体は 'env'を使うようです。](https://github.com/rack/rack/blob/master/lib/rack/request.rb#L308 ) –
私は[READMEのSinatraで問題を開いた](https://github.com/sinatra/sinatra/issues/542)。 –
はい、私の答えを参照してください –