1

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

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

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

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

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

所以它似乎很难将 products=[{"id":97497,"name":"iPad"}] 转换为正确的对象类型,其定义为:

public IEnumerable<Products> products { get; set;}在 ProductRequest 模型和 Products 类中看起来像:

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

作为附加信息,当使用带有 POST 而不是 GET 的相同调用时,它工作正常,对象被正确转换。

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

4

2 回答 2

0

你可以通过 url 来做,但你不使用 JSON。您的 URL 应如下所示:

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 正文中包含参数,但这不一定是最好的主意。请参阅有关此 SO 问题的讨论。

于 2013-04-19T01:04:36.433 回答
0

我认为您在 HTTP POST 和 HTTP GET 之间感到困惑,这就是您将产品设为 null 的原因。你可以看看GET 和 POST 有什么区别

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

于 2013-04-19T00:00:19.360 回答