2010-02-16 16 views
20

Utilizzando il seguente Sinatra applicazioneCome ottenere tutti i parametri URL in un'app Sinatra

get '/app' do 
    content_type :json 
    {"params" => params}.to_json 
end 

Invocare:

/app?param1=one&param2=two&param2=alt

darà il risultato seguente:

{"params":{"param1":"one","param2":"alt"}}

Params ha solo due chiavi, para m1 & param2.

Capisco che Sinatra sta impostando i parametri come hash, ma non rappresenta tutta la richiesta di URL.

C'è un modo in Sinatra per ottenere un elenco di tutti i parametri URL inviati nella richiesta?

risposta

18

Credo che i parametri predefiniti con lo stesso nome verranno sovrascritti dal parametro che è stato elaborato per ultimo.

Si potrebbe o configurazione params2 come un array di sorta

...&param2[]=two&param2[]=alt 

o analizzare la stringa di query contro il Sinatra fornito params hash.

4

È possibile creare un aiutante per rendere il processo più amichevole:

require 'cgi' 

helpers do  
    def request_params_repeats 
    params = {} 
    request.env["rack.input"].read.split('&').each do |pair| 
     kv = pair.split('=').map{|v| CGI.unescape(v)} 
     params.merge!({kv[0]=> kv.length > 1 ? kv[1] : nil }) {|key, o, n| o.is_a?(Array) ? o << n : [o,n]} 
    end 
    params 
    end 
end 

È quindi possibile accedere ai parametri nel blocco get:

get '/app' do 
    content_type :json 
    request_params_repeats.to_json 
end 
+0

non funziona per me, penso che il flusso rack.input sia stato già letto da sinatra. –

9

kwon suggerisce di analizzare la stringa di query. È possibile utilizzare CGI per analizzare come segue:

require 'cgi' 

get '/app' do 
    content_type :json 
    {"params" => CGI::parse(request.query_string)}.to_json 
end 

Invocare:

/app?param1=one&param2=two&param2=alt

darà il risultato seguente:

{"params":{"param1":["one"],"param2":["two","alt"]}}

20

Qualsiasi richiesta cremagliera

get '/app' do 
    params = request.env['rack.request.query_hash'] 
end 
+1

'rack.request.query_string' se vuoi la stringa raw e non un hash. –

Problemi correlati