10

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

到目前为止,我看到的所有示例似乎都表明我必须使用“POST”。但我不想使用“POST”,因为这是一个查询,同时我不想要一个有 16 个参数的函数,因为那会很脆。

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

我希望将上述内容变成:

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

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

4

2 回答 2

23

您可以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(ie Id, Name, ...) 的属性可以从 Uri 中的查询字符串传入:

http://.../api/products?Id=1&Name=Product1&CreatedBy=1/4/2013&StockNumber=ABC0001
于 2013-01-04T22:13:41.313 回答
3

您可能想查看 Web API 中的 OData 支持 - 也许这会满足您的需求?取决于查询的实现有多复杂!

http://blogs.msdn.com/b/alexj/archive/2012/08/15/odata-support-in-asp-net-web-api.aspx

于 2013-01-04T19:05:31.983 回答