2012-07-30 21 views
5

Yapmaya çalıştığım şey,/api/hesap makinesi gibi bir api isteğine sahip olmak mı? = 7,00 & = 9,99 & = 5,50 & = 45,76 benim denetleyicisi isteği veri nasıl yakalayabilir vb? Sorgu dizesinin anahtarları/kodları 1 ile 1000 arasında bir değerdir. Sorgu dizesinde, bunların hepsinde değil, 1000 kodun bazı olabilirler. Değer kısmı iki katına çıkar.ASP.NET Web API - Çoklu argümanlar ile GET isteği

Sanırım çalışacağım tek yol, 1000 özelliği olan bir model nesneyi (ör. StupidObject) oluşturduğumda (kodlar için p1, p2, .. p1000 gibi özellikler kullanmalı, çünkü ints izin verilen bir özellik adı değil)) ModelBinder ile dekore edilmiştir. Sonra denetleyici için GetCalcResult(StupidObject obj){...} gibi bir şey olabilir Ama bu zarif bir çözüm gibi görünmüyor :)

GetCalcResult([FromURI]Dictionary<int, double> dict){...} gibi denetleyicileri denedim ancak dict her zaman boş. Ayrıca [FromURI] olmadan bir hata alıyorum. Aynı sonuçlar ile denetleyici parametresi olarak List<KeyValuePair<int, double>>'u denedi.

Herkes bana doğru yönde işaret edebilir mi veya bana bir çalışma örneği verebilir mi?

cevap

13

bir yolu parametre olarak değerleri geçiş yapmaya çalışan önlemek ve sadece eylem yönteminde

var queryValues = Request.RequestUri.ParseQueryString(); 

yapmaktır. Sorgu parametrelerine erişmek için yineleyebileceğiniz QueryValues ​​NameValueCollection olacaktır.

Gerçekten bir parametre kullanmak istiyorsanız, [FromUri] FormDataCollection türünde bir parametreye sahip olmak işe yarayabilir.

+2

Teşekkürler! RequestUri'de ParseQueryString olmadığı için var queryValues ​​= HttpUtility.ParseQueryString (Request.RequestUri.Query); Yanlış bir şey mi yapıyorum? RC versiyonunu kullanmak. – ano

+1

ParseQueryString, System.Net.Http dosyasında tanımlanan bir uzantı yöntemidir, bu yüzden System.Net.Http'yi kullanmanız gerekir; – rism