有没有办法使用问号将网址与Sinatra匹配?
get '/:id?inspect' do
# ...
end
get '/:id?last' do
# ...
end
get '/:id' do
# ...
end
我尝试转义问号\?
,正则表达式等,但没有一个有效。
我不想检索inspect
或last
的值。我只想知道它们是否在网址中提供。
这可能吗?
答案 0 :(得分:0)
标准路由不是由查询参数定义的,不应该是。为什么不在if
路线的params
上使用get /:id
构造?
我还建议您在请求中设置查询参数时,将其设置为:/:id?inspect=true
(提供虚拟值)
答案 1 :(得分:0)
你无法直接做你想做的事。在描述路线时,Sinatra将?
视为定义可选参数,并没有提供逃避它的方法。
在网址中,?
将路径与查询字符串分开,Sinatra仅在匹配路由时使用路径。查询字符串的内容在params
中被解析并可用,原始字符串可用作request.query_string
。
您的网址方案似乎相当不寻常,但如果您想避免在实际路线中检查query_string
,则可能是创建custom condition以应用于路线,并在那里办理登机手续:
set(:query) { |val| condition { request.query_string == val } }
get '/:id', :query => 'inspect' do
# ...
end
get '/:id', :query => 'last' do
# ...
end
get '/:id' do
# ...
end