Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to access all querystring parameters as a dictionary

I have some dynamic querystring parameters that I would like to interact with as an IDictionary<string,string>. How do I do this?

I tried

public IHttpActionResult Get(FromUri]IDictionary<string, string> selections) 

as suggested but for a query of

/api/MyController?selections%5Bsub-category%5D=kellogs 

it always gives me a dictionary with 0 items.

I don't even need the selections prefix. I literally just need all querystring parameters as a dictionary. How do I do this and why won't the above work?

like image 559
George Mauer Avatar asked Mar 15 '14 05:03

George Mauer


1 Answers

You can use the GetQueryNameValuePairs extension method on the HttpRequestMessage to get the parsed query string as a collection of key-value pairs.

public IHttpActionResult Get() {     var queryString = this.Request.GetQueryNameValuePairs(); } 

And you can create some further extension methods to make it eaiser to work with as described here: WebAPI: Getting Headers, QueryString and Cookie Values

/// <summary> /// Extends the HttpRequestMessage collection /// </summary> public static class HttpRequestMessageExtensions {     /// <summary>     /// Returns a dictionary of QueryStrings that's easier to work with      /// than GetQueryNameValuePairs KevValuePairs collection.     ///      /// If you need to pull a few single values use GetQueryString instead.     /// </summary>     /// <param name="request"></param>     /// <returns></returns>     public static Dictionary<string, string> GetQueryStrings(         this HttpRequestMessage request)     {          return request.GetQueryNameValuePairs()                        .ToDictionary(kv => kv.Key, kv=> kv.Value,                              StringComparer.OrdinalIgnoreCase);     } } 
like image 67
nemesv Avatar answered Oct 06 '22 23:10

nemesv