2012-07-30 22 views
5

Lo que intento hacer es tener una solicitud de API como/api/calculator? = 7,00 & = 9,99 & = 5,50 & = 45,76 etc. Cómo mi controlador puede agarrar los datos de solicitud? Las claves/códigos de la cadena de consulta son entradas entre 1 y 1000. En la cadena de consulta pueden ser algunos de los 1000 códigos, no necesariamente todos ellos. La parte de valor es doble.ASP.NET Web API - Solicitud GET con múltiples argumentos

La única manera que creo funcionaría es si creo un objeto modelo (ex StupidObject) con 1000 propiedades (debería usar propiedades nombradas como p1, p2, .. p1000 para códigos ahora, ya que los nombres no son un nombre de propiedad permitido)), decorado con ModelBinder. Entonces para el controlador podría tener algo como GetCalcResult(StupidObject obj){...} Pero eso no parece una solución elegante :)

Probé controladores como GetCalcResult([FromURI]Dictionary<int, double> dict){...} pero dict es siempre nulo. También sin el [FromURI] me sale un error. También intenté List<KeyValuePair<int, double>> como parámetro de controlador con los mismos resultados.

¿Alguien podría señalarme en la dirección correcta o darme un ejemplo de trabajo?

Respuesta

13

Una forma es evitar tratar de pasar los valores como un parámetro y simplemente hacer

var queryValues = Request.RequestUri.ParseQueryString(); 

en su método de acción. QueryValues ​​será NameValueCollection que puede iterar para obtener acceso a sus parámetros de consulta.

Si realmente desea utilizar un parámetro, podría funcionar un parámetro del tipo [FromUri] FormDataCollection.

+2

Gracias! Usé 'var queryValues ​​= HttpUtility.ParseQueryString (Request.RequestUri.Query);', ya que no había ParseQueryString en RequestUri. ¿Estoy haciendo algo mal? Usando la versión RC. – ano

+1

ParseQueryString es un método de extensión definido en System.Net.Http por lo que necesitaría un uso de System.Net.Http; – rism