2013-04-18 77 views
1

我「米使用的WebAPI與MVC4,做一個HTTP GET,看起來像這樣:的WebAPI得到不轉換正確地模型綁定對象

api_version=2&products=[{"id":97497,"name":"iPad"}]&pageno=1 

映射到這個調用是取得動作控制器的簽名:

[HttpGet] 
public string Get([FromUri] ProductRequest request){ ... } 

的問題是,上面傳遞到獲取動作方法ProductRequest對象包含空值的產品,而所有其他值都OK。

如此看來,它有麻煩轉換產品= [{ 「ID」:97497, 「姓名」: 「ipad公司」}]到右對象類型,其定義爲:

在ProductRequest模型public IEnumerable<Products> products { get; set;}和產品類看起來像:

public int id { get; set; } 
public string name { get; set; } 

作爲一個附加信息,當使用與POST相同的調用而不是GET時,它可以正常工作,對象被正確轉換。

那麼,我在做什麼錯了,我怎麼能得到http GET正確轉換查詢參數傳遞給模型?

回答

0

我認爲你在HTTP POST和HTTP GET之間混淆,這就是爲什麼你沒有把產品作爲null。你可以看看What's the difference between GET and POST

基本上,我認爲你可以使用TempData的但它有利弊,取決於你如何使用它的上下文。

+0

是什麼讓你覺得我困惑POST和GET? – 2013-04-19 03:19:02

0

你可以通過url來做到這一點,但你不使用JSON。這是你的網址應該是什麼樣子:

api_version=2&products[0].id=97497&products[0].name=iPad&pageno=1 

如果你想在同一請求中添加更多的產品,你會遞增數組索引:

{urlasabove}&products[1].id=4234&products[1].name=iPadmini 

這是罰款您的要求,但可快速失控。對於GET請求中的複雜對象,您可以考慮使用POST。或者,您可以將參數包含在GET主體中,但這不一定是最好的主意。請參閱this SO question的討論。