WebAPI无法正确转换为模型绑定对象

时间:2013-04-18 05:01:53

标签: get asp.net-web-api

我正在使用带有MVC4的WebAPI,执行如下所示的http get:

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

映射到此调用的get动作控制器的签名是:

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

问题是传递给上面的Get操作方法的ProductRequest对象包含产品的空值,而所有其他值都是Ok。

所以似乎将产品= [{“id”:97497,“name”:“iPad”}]转换为正确的对象类型时遇到了问题,该对象类型定义为:

ProductRequest模型中的

public IEnumerable<Products> products { get; set;}和Products类看起来像:

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

作为附加信息,当使用POST而不是GET进行相同的调用时,它可以正常工作,对象可以正常转换。

那么,我做错了什么,如何让http GET正确地将查询参数转换为传入的模型?

2 个答案:

答案 0 :(得分:0)

我认为您在HTTP POST和HTTP GET之间感到困惑,这就是您将产品视为null的原因。您可以查看What's the difference between GET and POST

基本上,我认为您可以使用 TempData ,但它有利有弊,并且取决于您使用它的上下文。

答案 1 :(得分:0)

您可以通过网址完成,但不使用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的讨论。