有没有办法通过“GET”查询web api,但是参数中有复杂的对象?
到目前为止我看到的所有例子似乎表明我必须使用“POST”。但是我不想使用“POST”,因为这是一个查询,同时我不想要一个带有16个参数的函数,因为它只是尖叫脆弱。
public Product Get(int id, string name, DateTime createdBy, string stockNumber, ... )
{
...
}
我希望将上述内容转化为:
public Product Get(ProductQuery query)
{
...
}
有办法做到这一点吗?你如何使HttpClient与上述服务一起工作。
答案 0 :(得分:22)
您可以传递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
答案 1 :(得分:3)
您可能希望查看Web API中的OData支持 - 也许这样做可以满足您的需求?取决于查询的实现有多复杂!
http://blogs.msdn.com/b/alexj/archive/2012/08/15/odata-support-in-asp-net-web-api.aspx