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

Alw*_*wyn 10 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, ... ) 
    { 
          ...
    }
Run Code Online (Sandbox Code Playgroud)

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

public Product Get(ProductQuery query) 
    { 
          ...
    }
Run Code Online (Sandbox Code Playgroud)

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

Mag*_*ing 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; }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用[FromUri]... 注释您的动作参数

    public Product Get([FromUri] ProductQuery productQuery)
    {...}
Run Code Online (Sandbox Code Playgroud)

...并且可以从Uri中的查询字符串传递ProductQuery(即Id,Name...)的属性:

http://.../api/products?Id=1&Name=Product1&CreatedBy=1/4/2013&StockNumber=ABC0001
Run Code Online (Sandbox Code Playgroud)