gpt4 book ai didi

ruby - Sinatra 请求 ["SOME_HEADER"] 不适用于 POST;文档错误?

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:14 25 4
gpt4 key购买 nike

Sinatra 自述文件 says :

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

查看源代码,Sinatra 实际上并没有对 [] 做任何事情;它在 Rack 中作为 GETPOST 的联合实现。和 POST just returns the form hash .对于 GET,它是查询哈希。在所有三个路由中,request.params 都是空的。

我的问题:这是一个文档错误,还是我误解了如何使用 request[]?目前,我的应用程序在 env[] 方法下运行良好。但我想做到“正确”。

最佳答案

似乎是文档中的错误。 request[] 实际上检索请求的参数,而不是 header :

https://github.com/rack/rack/blob/master/lib/rack/request.rb#L262

def [](key)
params[key.to_s]
end

我也通过测试仔细检查了它。看起来有点傻,但看起来您确实无法以任何方式直接访问 header ,除非通过 env。至少我想不出任何其他方法。

关于ruby - Sinatra 请求 ["SOME_HEADER"] 不适用于 POST;文档错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11263729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com