Các Sinatra README says:Yêu cầu Sinatra ["SOME_HEADER"] không hoạt động trên POST; doc lỗi?
request["SOME_HEADER"] # value of SOME_HEADER header
Với ứng dụng này:
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
Các spec đầu tiên trôi qua; hai trường hợp tiếp theo không thành công:
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
Nhìn vào nguồn, Sinatra không thực sự làm bất kỳ điều gì với []
; nó được triển khai trong Rack làm công đoàn của GET
và POST
. Và POST
just returns the form hash. Đối với GET
đó là băm truy vấn. Trong cả ba tuyến đường, request.params
trống.
Câu hỏi của tôi: Đây có phải là lỗi tài liệu hay tôi hiểu nhầm cách sử dụng request[]
? Hiện tại, đơn đăng ký của tôi đang hoạt động tốt với phương pháp env[]
. Nhưng tôi muốn làm điều đó "đúng".
Tôi nghĩ bạn đang đúng vì [nguồn Rack chính nó dường như sử dụng 'env'] (https://github.com/rack/rack/blob/master/lib/rack/request.rb#L308) –
Tôi vừa [mở một vấn đề với Sinatra cho README] (https://github.com/sinatra/sinatra/issues/542). –
có, xem câu trả lời của tôi –