Веб-API ASP.NET — запрос GET с несколькими аргументами

Я пытаюсь сделать запрос API, например /api/calculator?1=7.00&2=9.99&3= 5,50&4=45,76 и т. д. Как мой контроллер может получить данные запроса? Ключи/коды строки запроса представляют собой целые числа от 1 до 1000. В строке запроса они могут быть некоторыми из 1000 кодов, не обязательно всеми. Ценная часть удваивается.

Я думаю, что один из способов сработает, если я создам объект модели (например, StupidObject) с 1000 свойствами (сейчас следует использовать свойства с именами p1, p2,..p1000 для кодов, поскольку int не являются разрешенным именем свойства), украшенный ModelBinder. Тогда для контроллера я мог бы иметь что-то вроде GetCalcResult(StupidObject obj){...} Но это не похоже на элегантное решение :)

Я пробовал такие контроллеры, как GetCalcResult([FromURI]Dictionary<int, double> dict){...}, но dict всегда нулевой. Также без [FromURI] я получаю сообщение об ошибке. Также попробовал List<KeyValuePair<int, double>> в качестве параметра контроллера с теми же результатами.

Может ли кто-нибудь указать мне правильное направление или дать мне рабочий пример?


person ano    schedule 30.07.2012    source источник


Ответы (1)


Один из способов — не пытаться передавать значения в качестве параметра и просто выполнять

  var queryValues = Request.RequestUri.ParseQueryString();

в вашем методе действия. QueryValues ​​будет NameValueCollection, который вы можете перебирать, чтобы получить доступ к параметрам вашего запроса.

Если вы действительно хотите использовать параметр, вам может подойти параметр типа [FromUri]FormDataCollection.

person Darrel Miller    schedule 30.07.2012
comment
Спасибо! Я использовал var queryValues = HttpUtility.ParseQueryString(Request.RequestUri.Query);, так как в RequestUri не было ParseQueryString. Я делаю что-то неправильно? Использование версии RC. - person ano; 31.07.2012
comment
ParseQueryString — это метод расширения, определенный в System.Net.Http, поэтому вам понадобится использование System.Net.Http; - person rism; 12.03.2015