通过GET进行Mvc Web API复杂对象查询

时间:2013-01-04 19:01:25

标签: asp.net rest asp.net-mvc-4 asp.net-web-api

有没有办法通过“GET”查询web api,但是参数中有复杂的对象?

到目前为止我看到的所有例子似乎表明我必须使用“POST”。但是我不想使用“POST”,因为这是一个查询,同时我不想要一个带有16个参数的函数,因为它只是尖叫脆弱。

public Product Get(int id, string name, DateTime createdBy, string stockNumber, ... ) 
    { 
          ...
    }

我希望将上述内容转化为:

public Product Get(ProductQuery query) 
    { 
          ...
    }

有办法做到这一点吗?你如何使HttpClient与上述服务一起工作。

2 个答案:

答案 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的属性(即IdName,...)可以从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