Запрос комплексного объекта Mvc Web API через GET
Есть ли способ запросить веб-api через "GET", но со сложным объектом в его параметре?
Все примеры, которые я видел до сих пор, похоже, указывают, что мне придется использовать "POST". Но я не хочу использовать "POST", потому что это запрос, в то же время я не хочу функции с 16 аргументами, потому что это просто кричит хрупким.
public Product Get(int id, string name, DateTime createdBy, string stockNumber, ... )
{
...
}
Я хочу, чтобы приведенное выше было:
public Product Get(ProductQuery query)
{
...
}
Есть ли способ сделать это? И как вы делаете HttpClient работать с вышеуказанной услугой.
Ответы
Ответ 1
Вы можете передать параметр ProductQuery
[FromUri]
.
Скажем, это ваш класс ProductQuery
:
public class ProductQuery
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedBy { get; set; }
public string StockNumber { get; set; }
}
Вы можете аннотировать свой параметр действия с помощью [FromUri]
...
public Product Get([FromUri] ProductQuery productQuery)
{...}
... и свойства ProductQuery
(т.е. Id
, Name
,...) могут быть переданы из строки запроса в Uri:
http://.../api/products?Id=1&Name=Product1&CreatedBy=1/4/2013&StockNumber=ABC0001
Ответ 2
Возможно, вам захочется взглянуть на поддержку OData в Web API - возможно, это будет делать то, что вы хотите? Зависит от того, насколько сложна реализация вашего запроса!
http://blogs.msdn.com/b/alexj/archive/2012/08/15/odata-support-in-asp-net-web-api.aspx