Depending on how you send the data on the client:
* Using jQuery or any other wrapper library it'll automatically encode form variables and URL parameters
* Even if you hardcode the query string parameters on the URL the browser will automatically encode them
Using a dictionary in this situation just makes the API a bit convoluted because it's not clear what the API expects for parameters exactly. If you're using GET, you can just map query string parameters directly to parameter names (ie. &id=xxxx) maps to Get(string id) or [Route(person/{id}] and person/xxxx. You don't even need [FromUri]. Your approach works but it's much less expressive for the person consuming the API.
+++ Rick ---
>>Why are you passing data (a dictionary) on the URL via [HttpGet]? SHouldn't that go into an [HttpPost] and then [FromBody]? This seems bad behavior for a REST service.
>>
>
>I have auto-complete textbox on the page. For this to function I need to pass the id (int) and a string. I can pass them as parameters, but I would need to hash the string then before sending to API. I was thinking that sending a simple object (KeyValuePair) would be better than sending two parameters.
>
>I can also use a post instead of the get, but I was thinking since the purpose is to receive information and not really post anything back, get would be a better choice.