2012-07-30 16 views
5

Co staram się zrobić, to mieć żądanie API podobnego/api/kalkulatora? = 7,00 & = 9,99 & = 5,50 & = 45,76 itd. Jak mój kontroler może chwycić dane prośbę? Klawisze/kodeksy ciągu kwerendy są ints między 1 i 1000. W ciągu kwerendy mogą być niektóre z 1000 kodów, niekoniecznie wszystkie z nich. Część wartości jest podwójna.ASP.NET Web API - żądanie GET z wieloma argumentami

Jedynym sposobem, jaki powinienem wykonać, jest utworzenie obiektu modelu (ex StupidObject) z 1000 właściwościami (należy użyć właściwości o nazwach takich jak p1, p2, .. p1000 dla kodów teraz, ponieważ ints nie są dozwoloną nazwą właściwości), ozdobione ModelBinder. Wtedy dla kontrolera mogłem mieć coś takiego jak GetCalcResult(StupidObject obj){...} Ale to nie wydaje się być eleganckim rozwiązaniem :)

Próbowałem kontrolerów takich jak GetCalcResult([FromURI]Dictionary<int, double> dict){...}, ale dict jest zawsze pusty. Również bez [FromURI] pojawia się błąd. Wypróbowano także jako parametr kontrolera o List<KeyValuePair<int, double>> z tymi samymi wynikami.

Czy ktoś może mi punkt w kierunku prawego lub dać mi przykład działa?

Odpowiedz

13

Jednym ze sposobów jest unikanie stara się przekazać wartości jako parametr i po prostu zrobić

var queryValues = Request.RequestUri.ParseQueryString(); 

w swoim sposobie działania. QueryValues ​​będzie NameValueCollection które można iterować, aby uzyskać dostęp do parametrów kwerendy.

Jeśli naprawdę chcesz używać parametru, o parametr typu [FromUri] FormDataCollection może działać.

+2

Dzięki! Użyłem 'var queryValues ​​= HttpUtility.ParseQueryString (Request.RequestUri.Query);', ponieważ nie było żadnych ParseQueryString na RequestUri. czy robię coś źle? Korzystanie z wersji RC. – ano

+1

ParseQueryString jest metodą rozszerzenia zdefiniowaną w System.Net.Http, więc trzeba użyć System.Net.Http; – rism