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?
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); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With