将一组json对象发送到web api,如何格式化url?

时间:2017-02-02 17:52:44

标签: c# asp.net json asp.net-web-api

我已经编写了asp.net web-api项目,其中包含以下api-s:

控制器方法:Uri:

GetAllItems:/ api / items(works)

GetItem(int id)/ api / items / id(works) 和

GetListOfItem(IEnumerable< Items> items)/ api / items / items of items(不起作用)

该功能与此类似(不关心逻辑)

public IHttpActionResult GetByArray(IEnumerable<Book> bks)
    {
        var returnItems = items.Select(it => it).Where(it => it.Price < bks.ElementAt(0).Price || it.Price < bks.ElementAt(1).Price);
        if (returnItems == null)
            return NotFound();
        else
        {
            return Ok(returnItems);
        }
    }

我正在使用邮递员发送请求并且以下请求正常

http://localhost:50336/api/items/
http://localhost:50336/api/items/100

但不是

http://localhost:50336/api/items/[{"Owner":"MySelf","Name":"C","Price":151},{"Owner":"Another","Name":"C++","Price":151}]

我应该如何格式化上一个请求,其中我有一个json格式的项目列表,以使其有效?

2 个答案:

答案 0 :(得分:6)

您希望使用HttpPostAttributeFromBodyAttribute

来装饰您的方法
[HttpPost]
public IHttpActionResult GetByArray([FromBody]IEnumerable<Book> bks)
{
}

然后发送json作为帖子正文。

你的邮差应该是这样的:

Postman

答案 1 :(得分:1)

专门针对

GetListOfItem(IEnumerable<Items> items) 

[FromBody]绝对是最佳选择。

如果您使用原始类型,可以执行以下操作:

GetListOfItem([FromUri] int[] itemIds)

并发送请求为:

/GetListOfItem?itemIds=1&itemIds=2&itemIds=3