2013-04-18 73 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的讨论。